- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語ソケットでWikipediaの情報入手)
C言語ソケットでWikipediaの情報入手
このQ&Aのポイント
- C言語ソケットを使用してWikipediaの情報を入手する方法を教えてください
- gccを使用してwiki_client.cをコンパイルし、./wiki_clientを実行することで、Wikipediaの情報を取得しようとしていますが、HTTP/1.1 400 Bad Requestが返ってきます。どこを修正すれば良いでしょうか?
- ブラウザからはアクセスできますが、C言語での実装がうまくいかないようです。環境はUbuntu 18.04のgcc 7.3.0です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
"400 Bad Request"と返ってきてしまう原因は、プログラムの下記の部分にあります。 sprintf(buf, "GET /wiki/%s http/1.1\r\n", argv[1]); 小文字ではなく大文字でHTTP/1.1と書いてください。 ただし、そこを直しても意図した結果を得ることはできません。その本は古いのでしょう。Wikipediaは今ではhttp:ではなくてhttps:を使うように変わってしまったためです。 http://en.wikipedia.org/wiki/Aにアクセスしようとすると https://en.wikipedia.org/wiki/Aへのリダイレクトが発生し、HTTPステータスコード301が返ってくることはそのプログラムで確認することができると思います。 しかし、そのプログラムではhttps:での通信に対応できないのです。
お礼
ベストアンサーを差し上げます。 なるほど、最初の関門は大文字・小文字だったんですね。本の記載が小文字でした。直すと確かにhttps:へのリダイレクトが発生して301が返ってきました: > ./wiki_client "O'Reilly_Media" HTTP/1.1 301 TLS Redirect Date: Mon, 11 Mar 2019 12:48:57 GMT Server: Varnish X-Varnish: 714716381 X-Cache: cp5007 int X-Cache-Status: int-front Server-Timing: cache;desc="int-front" Set-Cookie: WMF-Last-Access=11-Mar-2019;Path=/;HttpOnly;secure;Expires=Fri, 12 Apr 2019 12:00:00 GMT Set-Cookie: WMF-Last-Access-Global=11-Mar-2019;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Fri, 12 Apr 2019 12:00:00 GMT X-Client-IP: 126.15.51.117 Location: https://en.wikipedia.org/wiki/O'Reilly_Media Content-Length: 0 Connection: keep-alive 読み込みは完了できてはいませんが、満足です。今、この本で出来る限りのことはしました。今度、別の本でhttps:での通信について勉強しようと思います。 丁寧に教えて下さって、ありがとうございました!