CGIでYahooの検索結果のソースを取得したいです。

下記を実行してみましたが、エラー画面のソースが返ってきます。
原因が分かりますでしょうか?

$keyword = 'words';
$domain = 'search.yahoo.co.jp';
$next = '/search?p='.$keyword.'&ei=UTF-8&b=1&n=20';
$addr = (gethostbyname("$domain"))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
socket(YAHOOIN, 2, 1, 0);
connect(YAHOOIN, $name);
binmode(YAHOOIN);
select(YAHOOIN); $| = 1;
select(YAHOOIN); $| = 1; select(stdout);
print YAHOOIN "GET $file HTTP/1.0\r\n\r\n";
while(<YAHOOIN>){
$htmldatas .= $_;
}
close(YAHOOIN);

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

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント100pt

ヘッダを指定せずに、質問にあるリクエストを出すと、レスポンスが 301 で返ってきます。

HTTP/1.0 301 Moved Permanently

「エラー画面のソース」と言ってるのは、これですよね。


前にあった質問のときと同じく、Host ヘッダを指定すると結果が正しく得られるようです。

# Host ヘッダを指定する
print YAHOOIN "GET $file HTTP/1.0\r\nHost: $domain\r\n\r\n";

# $next か $file か、というところはタイプミスだと思うので、質問のコードをそのまま使ってます。

id:uwao

有り難うございました。
正常に取得出来ました。
ご指摘のとおりHostヘッダが原因でした。

2015/09/27 08:18:14

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

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

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

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

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