一般来说,服务器有可能阻止PHP cURL请求吗?
大约6-8个月以来,我每隔15分钟就会向某个面向公众的网址发出cURL请求。前几天它突然停止工作,URL开始返回一个空字符串。
当我在浏览器中或使用python get请求访问URL时,它会返回预期的数据。
我决定尝试在PHP中使用file_get_contents()函数访问相同的URL,结果也和预期的一样。
既然我现在找到了一个创可贴解决方案,那么cURL发送的默认头和file_get_contents()之间有什么不同吗?
发布于 2017-04-06 23:13:07
一般来说,服务器有可能阻止
cURL请求吗?
说大也大吧。如果您的用户代理字符串看起来像是来自curl,则服务器可以阻止请求。尝试使用-A选项设置自定义用户代理字符串。
curl -A "Foo/1.1" <url>编辑:哦,我看到你说的是"from PHP",所以只需要设置CURLOPT_USERAGENT选项:
curl_setopt($curl, CURLOPT_USERAGENT, 'Foo/1.1');发布于 2017-04-06 23:15:47
很多网站都是基于用户代理来屏蔽你的。我能想到的最好的解决办法就是在Chrome中打开你的开发者控制台,然后点击网络选项卡。转到您尝试访问的网站的URL,并找到获取所需数据的请求。右键单击该请求并将其复制为cURL。它将包含您的浏览器发送的所有标头。
如果你在php的cURL请求中添加了所有这些头文件,web服务器将无法区分来自curl的请求和来自浏览器的请求。
你需要每隔几年更新一次这些头文件(一些网站试图禁止机器人滥用多年的firefox或chrome的旧版本)。
发布于 2017-04-06 23:14:17
忘了curl吧。从HTTP请求的角度考虑这一点。服务器所看到的就是。如果您的curl请求包含服务器可以用来过滤请求的内容(例如用户代理头),它可以使用它来拒绝这些请求。
https://stackoverflow.com/questions/43259094
复制相似问题