こんにちは。1 つのドメインから複数のページのコンテンツを取得する必要があります。ここで、各ページに対して fsockopen 接続を使用し、次の方法でページのコンテンツを取得します。
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /page1.html HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
fgets($fp, 128);
}
fclose($fp);
}
?>
私のスクリプトは、ドメインに再接続して 2 番目のページを取得するために時間を浪費します。次のように、単一の接続を使用して複数のページを取得できるかどうか疑問に思っていました。
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET /page1.html HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
fgets($fp, 128);
} $out = "GET /page2.html HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
fgets($fp, 128);
}
fclose($fp);
}
?>
しかし、このメソッドは page1.html を 2 回返しています。理由はわかりません。
使用しようとしました: 接続: キープアライブ、または HTTP/1.0 ですが、この場合、サーバーから何も取得できませんでした (スクリプトの実行時間は無限です)。
これを解決するための提案はありますか?
ありがとうございました!