我正在使用ZOHO API,并尝试使用cURL更新记录。我尝试了不同的cURL变体,但始终返回“ false”。但是,当我使用浏览器调用相同的URL时,它可以工作。

有什么办法可以阻止cURL请求?我还有其他方法可以使用POST或GET请求来调用该URL吗?

我尝试过的cURL代码如下: 通用标签

有帮助吗?

解决方案

服务器本身无法阻止cURL请求,但是它们可以阻止任何不喜欢的请求。如果服务器检查了您的cURL请求不满足的某些参数,则它可能会决定以其他方式做出响应。

在大多数情况下,这种行为差异是由HTTP请求标头的存在(或不存在)和值触发的。例如,服务器可能检查User-Agent标头是否存在并具有有效值(它还可以检查许多其他内容)。

要了解来自浏览器的HTTP请求是什么样的,请使用HTTP调试代理,例如 Fiddler 或浏览器的开发人员工具。

要将自己的标头添加到您的cURL请求中,请使用 通用标签

其他提示

许多Web服务器都希望阻止由浏览器以外的其他设备伪造的HTTP请求,以防止漫游器滥用。 如果要模拟/假装来自浏览器的请求,则至少必须:

  1. 传递与您的浏览器完全相同的标头(使用 Firebug 即可获取它们))

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    

  2. 更改用户代理(浏览器名称)

    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    

  3. 启用cookie(例如,重定向和会话处理)

    curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    

  4. 添加引荐来源网址

    curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    

    祈祷您什么都没错过!

回答您的问题“有什么方法可以阻止CURL请求吗?” :是的,实际上,可以通过读取User-Agent标头检测到cURL请求。

您可以通过调用curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');来更改用户代理。

只需对此进行详细说明,您可以使用curl_setopt($ ch,CURLOPT_USERAGENT,'Mozilla / 5.0');或类似的东西来伪造用户代理。在这种情况下,服务器会认为Firefox浏览器正在发出请求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top