phpとcurlを使って簡単なHTTPクライアントのようなものを作ろうと思っています。

以下のコード実行すると
Bad Request
Your browser sent a request that this server could not understand.
client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23):/hoge/
のメッセージが表示されます。

HTTP/1.1ではHostフィールドが必須とのことなので
$header = array("Host: www.hogehoge.jp");
で、入力しているつもりなのですが
これでは駄目なのでしょうか。

<?php
$header = array("Host: www.hogehoge.jp");
$ch = curl_init("http://www.hogehoge.jp/hoge/");
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_exec($ch);
curl_close($ch);
?>

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/10/02 20:02:00
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:takagimasahiro No.2

回答回数23ベストアンサー獲得回数2

ポイント70pt

# 直接の答えではありません。ごめんなさい。

curl_setopt で CURLOPT_HEADER や CURLOPT_VERBOSE を設定して、実際に送信されているヘッダの内容を確認してみてはいかがでしょうか。実際に送信しているヘッダが確認できれば、次にそれを直接 telnet で実行してみるなどすればヒントが得られるかもしれません。

  • 補足1: 手元の環境で CURLOPT_VERBOSE を指定して試してみたところ、Host: ヘッダを明示的に指定しなくても自動的に送信してくれているようです。ただ、そういう仕様なのかどうかは未確認です。環境に依存するかもしれません
  • 補足2: もし HTTP/1.1 にこだわらないのなら、curl_setopt の CURLOPT_HTTP_VERSION で明示的に HTTP/1.0 を指定することもできます。

その他の回答1件)

id:takagimasahiro No.2

回答回数23ベストアンサー獲得回数2ここでベストアンサー

ポイント70pt

# 直接の答えではありません。ごめんなさい。

curl_setopt で CURLOPT_HEADER や CURLOPT_VERBOSE を設定して、実際に送信されているヘッダの内容を確認してみてはいかがでしょうか。実際に送信しているヘッダが確認できれば、次にそれを直接 telnet で実行してみるなどすればヒントが得られるかもしれません。

  • 補足1: 手元の環境で CURLOPT_VERBOSE を指定して試してみたところ、Host: ヘッダを明示的に指定しなくても自動的に送信してくれているようです。ただ、そういう仕様なのかどうかは未確認です。環境に依存するかもしれません
  • 補足2: もし HTTP/1.1 にこだわらないのなら、curl_setopt の CURLOPT_HTTP_VERSION で明示的に HTTP/1.0 を指定することもできます。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません