Issue with file_get_contents()



我正在编写PHP代码,从大约20个网站获取特定格式的内容。

除了一个网站外,其他网站都正常运行。现在,问题来了。
我使用file_get_contents()从网站获取图像并将其保存在我的服务器上。该图像存在于远程服务器上,可以通过浏览器访问,但我得到404响应,同时通过代码做它。

我无法理解这背后的问题,因为这种方法对于其他网站来说是完美的。

是否与发送的报头有关?

答案可能是:是的…

我想他们正在检查用户代理。

这些在你的报头中发送。您可以伪造您的用户代理。但是不要使用file_get_contents(),因为它不允许伪造用户代理。查看curl

编辑1

Barmar的链接显示了同时在不同的用户代理中使用file_get_contents()的可能性。值得研究一下……

编辑2

但它也可能是关于检查引用者…如果是这种情况,您确实需要使用curl来设置引用器

编辑3

现在看到了URL,并查看您得到的错误404(而不是50x),我建议您检查URL是否正在转义和解析。我看到URL在域名后面包含空格和两个斜杠。检查空格是否转义成%20,以及双斜杠是否不应该被去掉,只剩下一个斜杠。

http://celebslam.celebuzz.com//bfm_gallery/2014/03/Lindsay Lohan 2 Broke Girls/gallery_enlarged/gallery_enlarged-lindsay-lohan-2-broke-girls-01.jpg

应该成为

http://celebslam.celebuzz.com/bfm_gallery/2014/03/Lindsay%20Lohan%202%20Broke%20Girls/gallery_enlarged/gallery_enlarged-lindsay-lohan-2-broke-girls-01.jpg

注意,服务器是区分大小写的!

是的,首先-检查,如果该网站检查对图像访问的参考。例如,尝试直接在浏览器中获取图像

它还可以检查user-agent字段和其他内容

可能这将有助于通过curl获取文件(代码示例容易找到或我会给你一个简单的类)

p。很有趣。你能给我一些图片或例子吗?

可能是推荐人或用户代理。这包括:

function file_get_contents_custom($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION , 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian/1.6-7'); 
    $data = curl_exec($ch); 
    curl_close($ch);
    return $data;
}
更新:

您使用file_get_contents链接的图像对我来说很好。这可能是服务器有某种DDOS保护。你平均一秒钟发出多少个请求?

相关内容

  • 没有找到相关文章

最新更新