file_get_contentsを使用する場合、コンテンツレングスヘッダーを無視します
-
27-10-2019 - |
質問
ページの内容を取得する必要があります。 Content-Length: 0
ただし、ページが空になることはありません。
file_get_contents(url)
空の文字列を返すだけです。
ページで返されるヘッダー全体は次のとおりです。
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Sat, 18 Feb 2012 18:14:59 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Date: Sat, 18 Feb 2012 18:14:59 GMT
Server: lighttpd
file_get_contentsを使用してヘッダーを無視することは可能ですか、それともカールを使用する必要がありますか?
編集
get_headers(url)
出力(使用 print_r
):
Array
(
[0] => HTTP/1.0 200 OK
[1] => X-Powered-By: PHP/5.3.10
[2] => Content-type: text/html
[3] => Content-Length: 0
[4] => Connection: close
[5] => Date: Sat, 18 Feb 2012 22:39:52 GMT
[6] => Server: lighttpd
)
解決 2
楽観主義者が指摘したように、問題はヘッダーとは何の関係もありませんでしたが、ユーザーエージェントヘッダーをサーバーに送信しませんでした。
file_get_contents
サーバーが常に返されていても、ユーザーエージェントヘッダーを送信した後に完璧に機能しました Content-Length: 0
.
変。
他のヒント
私は、HTTPレベルの関数のどれもそのような答えを読むことができないと信じています。それは間違っているhttpの答えであるため、「私の体は空です、読んではいけません」と書かれています。
Freadに基づいて独自の機能が必要になります。これは、ソケットを微細に読み取るものです。このようなもの:
$aURL = parse_url($sURL);
if ($iHandle = fsockopen($aURL["host"], 80, $iError, $sError))
{
$sQuery = substr($sURL, strpos($sURL, $aURL["host"]) + strlen($aURL["host"]));
$sOut = "GET " . (($sQuery != "") ? $sQuery : "/") . " HTTP/1.1\r\n";
$sOut .= "Host: " . $aURL["host"] . "\r\n";
$sOut .= "Connection: Close\r\n\r\n";
fputs($iHandle, $sOut);
while (!feof($iHandle))
{
$sResult .= fread($iHandle, 1024);
}
}
次に、ヘッダーをカットするだけです。
所属していません StackOverflow