2012-08-12 171 views
2

如果我尝试和阅读网站的源我有时会收到如下(如图所示例如URL):500内部服务器错误的file_get_contents

Warning: file_get_contents(http://www.iwantoneofthose.com/gift-novelty/golf-ball-finding-glasses/10602617.html) 
[function.file-get-contents]: failed to open stream: HTTP request failed! 
HTTP/1.1 500 Internal Server Error in /home/public_html/pages/scrape.html on line 165 

然而自身的URL是好的。为什么会出现这种情况?

我尝试以下解决方法建议,但结果相同:

$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n")); 
$context = stream_context_create($opts); 
$header = file_get_contents('https://www.example.com',false,$context); 

现在这是莫名其妙我...

+0

[需要HTTP 500响应体文件\ _get \ _contents(PHP)](https://stackoverflow.com/questions/6040978/need-response-body-of-http-500的可能的复制-with-file-get-contents-php) – halfer 2017-07-31 13:42:06

回答

2

的问题是在你的User-Agent头。这为我工作:

$opts = array('http'=>array('header' => "User-Agent:Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1\r\n")); 
$context = stream_context_create($opts); 
$header = file_get_contents('http://www.iwantoneofthose.com/gift-novelty/golf-ball-finding-glasses/10602617.html',false,$context); 
+0

即使这个工作,这当然不应该如何使用用户代理。这是多合法? – user2019515 2013-08-21 08:52:01

2

我不知道确切的原因,但也有一些服务器的工作时,file_get_contents失败。但你有另一种选择;

$fp = fsockopen("www.iwantoneofthose.com", 80, $errn, $errs); 
$out = "GET /gift-novelty/golf-ball-finding-glasses/10602617.html HTTP/1.1\r\n"; 
$out .= "Host: www.iwantoneofthose.com\r\n"; 
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0\r\n"; 
$out .= "Connection: close\r\n"; 
$out .= "\r\n"; 
fwrite($fp, $out); 

$response = ""; 
while ($line = fread($fp, 4096)) { 
    $response .= $line; 
} 
fclose($fp); 


$response_body = substr($response, strpos($response, "\r\n\r\n") + 4); 
// or 
list($response_headers, $response_body) = explode("\r\n\r\n", $response, 2); 

print $response_body; 
+0

'print'之前的行是什么? ('SUBSTR($ RESP ...') – user2019515 2013-08-21 09:06:08