我正在编写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保护。你平均一秒钟发出多少个请求?