服务器可以专门阻止卷曲请求吗?

时间:2017-04-06 15:11:46

标签: php curl file-get-contents

一般来说,服务器是否可以阻止PHP cURL请求?

我每隔15分钟就向某个面向公众的网址发出cURL请求约6-8个月。突然有一天它停止工作,URL开始返回一个空字符串。

当我在浏览器中点击URL或使用python get请求时,它会返回预期的数据。

我决定尝试在PHP中使用file_get_contents()函数访问相同的URL,并且也可以按预期工作。

由于我现在找到了一个bandaid解决方案,cURL发送的默认标头与file_get_contents()之间是否存在任何差异,这些标头允许一个请求被阻止而另一个请求通过?

3 个答案:

答案 0 :(得分:3)

  

一般来说,服务器是否可以阻止PHP cURL   请求?

排序。如果您的用户代理字符串看起来像是来自curl,则服务器可以阻止请求。尝试使用-A选项设置自定义用户代理字符串。

curl -A "Foo/1.1" <url>

编辑:哎呀我看到你说过&#34;来自PHP&#34;,所以只需设置CURLOPT_USERAGENT选项:

curl_setopt($curl, CURLOPT_USERAGENT, 'Foo/1.1');

答案 1 :(得分:1)

忘记卷曲。从HTTP请求的角度考虑它。所有服务器都看到了。如果您的curl请求包含某些内容(例如用户代理头),服务器可以使用它来过滤掉请求,它可以使用它来拒绝这些请求。

答案 2 :(得分:1)

许多网站都会根据用户代理阻止您。我能想到的最佳解决方法是在Chrome中打开您的开发者控制台,然后点击网络标签。转到您尝试访问的网站的URL,找到获取所需数据的请求。右键单击该请求并将其复制为cURL。它将包含您的浏览器发送的所有标头。

如果您将所有这些标题添加到php中的cURL请求中,则网络服务器将无法区分您的curl请求与您的浏览器之间的区别。

您需要每隔几年更新一次这些标题(有些网站试图禁止旧版本的Firefox或Chrome机器人滥用多年)。