下記を実行してみましたが、エラー画面のソースが返ってきます。
原因が分かりますでしょうか?
$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);
ヘッダを指定せずに、質問にあるリクエストを出すと、レスポンスが 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 か、というところはタイプミスだと思うので、質問のコードをそのまま使ってます。