我正在用PHP编写一个代码,它从大约20个网站获取特定格式的内容。
除了一个网站外,所有网站都在正常工作。现在,问题就在这里。
我使用file_get_contents()从网站获取图像并保存在我的服务器上。图像显示在远程服务器上,可以通过浏览器访问,但通过代码进行处理时,我会得到404响应。
我无法理解这背后的问题,因为这个方法对其他网站非常有效。
是否与发送的标头有关?任何帮助都将不胜感激。
发布于 2014-03-11 21:18:09
答案可能是:是的..。
我想他们是在检查用户代理。
这些都是在你的头上发送的。你可以假装你的用户代理。但是不要使用file_get_contents(),因为它不允许伪造用户代理。调查卷曲。
编辑1
Barmar的链接显示了在不同的用户代理同时使用file_get_contents()的可能性。在调查的时候值得..。
编辑2
但也可能是为了检查推荐程序.如果是这样的话,您确实需要使用curl来设置referrer。
编辑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注意,服务器是区分大小写的!
发布于 2014-03-11 21:19:35
是的,首先-检查,如果那个网站检查参考图片访问。例如,尝试在浏览器中直接获取图像。
它还可以检查用户-agent字段和其他内容。
通过curl获取文件可能会有所帮助(代码示例很容易找到,或者我将给您提供简单的类)。
P.S>只是很有趣。你能给出一些图片url的例子来试试吗?
发布于 2014-03-11 21:42:50
可能是推荐人或用户代理。这包括两个方面:
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保护。平均每秒钟有多少次请求?
https://stackoverflow.com/questions/22336757
复制相似问题