我正在用PHP编写代码,该代码从大约20个网站获取特定格式的内容。
除了一个以外的所有网站都正常工作。现在,问题在于此
我正在使用file_get_contents()
从网站上获取图像并将其保存在我的服务器上。该图像存在于远程服务器上,可通过浏览器访问,但我通过代码执行404响应。
我无法理解这背后的问题,因为这种方法适用于其他网站。
是否与正在发送的标头有关?任何帮助将不胜感激。
答案 0 :(得分:3)
答案可能是:是的......
我想,他们正在检查用户代理。
这些是在你的标题中发送的。你可以伪造你的用户代理。不要使用file_get_contents()
,因为这不允许伪造您的用户代理。
查看curl。
修改1
Barmar的链接显示了同时使用file_get_contents()
和其他用户代理的可能性。在研究......时,这是值得的。
修改2
但也可以检查引荐来源 ...如果是这种情况,您确实需要使用curl
才能设置引荐来源强>
编辑3
现在看到了网址,并查看了你得到的错误404
(不是50x
),我建议你检查网址是否被转义并解析好了。我看到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
请注意,服务器是CaSe-SeNsItIvE!
答案 1 :(得分:1)
是的,首先 - 检查,如果该网站检查参与者的图像访问。例如,尝试直接在浏览器中获取图像
它还可以检查用户代理字段和其他内容
可能有助于通过curl获取文件(代码示例很容易找到,或者我会给你简单的类)
P.S>很有意思你能举一些图片的网址示例吗?
答案 2 :(得分:0)
可能是推荐人或用户代理人。这包括:
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保护。您平均有多少次请求?