我正在使用ZOHO API并尝试使用cURL更新记录.我尝试了不同的cURL变体,但它总是返回"false".但是当我使用浏览器调用相同的URL时,它可以工作.
他们有什么方法可以阻止cURL请求吗?有没有其他方法可以使用POST或GET请求调用该URL?
我尝试过的cURL代码如下:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)
Tom*_*esp 19
许多Web服务器希望阻止由浏览器以外的其他东西伪造的HTTP请求,以防止机器人滥用.如果您想从浏览器模拟/假装您的请求,您至少必须:
传递与浏览器完全相同的标题(使用即Firebug来获取它们)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
Run Code Online (Sandbox Code Playgroud)更改用户代理(浏览器的名称)
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
Run Code Online (Sandbox Code Playgroud)启用cookie(例如重定向和会话处理)
curl_setopt ($ch, CURLOPT_COOKIEJAR, $file);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
Run Code Online (Sandbox Code Playgroud)添加引用者
curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
Run Code Online (Sandbox Code Playgroud)并祈祷你没有错过任何东西!
Jon*_*Jon 16
服务器本身不能阻止cURL请求,但它们可以阻止任何他们不喜欢的请求.如果服务器检查您的cURL请求不满足的某些参数,则可能决定采用不同的方式.
在绝大多数情况下,这种行为差异是由HTTP请求标头的存在(或缺失)和值触发的.例如,服务器可能会检查User-Agent标头是否存在并且具有有效值(它还可以检查许多其他内容).
要了解来自浏览器的HTTP请求是什么样的,请使用Fiddler等HTTP调试代理或浏览器的开发人员工具.
要将自己的标头添加到cURL请求,请使用
curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName: HeaderValue'));
Run Code Online (Sandbox Code Playgroud)
回答你的问题"他们有什么方法可以阻止CURL请求吗?" :是的,实际上可以通过读取User-Agent标题来检测cURL请求.
您可以通过调用更改用户代理curl_setopt($ch, CURLOPT_USERAGENT, 'My user agent string!');.
| 归档时间: |
|
| 查看次数: |
37429 次 |
| 最近记录: |