请教一下cURL的User-Agent如何设置 - 技术问答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一下cURL的User-Agent如何设置 - 技术问答相关的知识,希望对你有一定的参考价值。

这几天看到了curl的强大,把以前的file_get_contents都改过来了,呵呵.可是就是发现\'User-Agent\' 没法设置为什么我用下面的两个方法设置都会出错呢?方法一:$headers = array(\'User-Agent\' => \'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)\');curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);方法二:curl_setopt($ch, CURLOPT_USERAGENT, \'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)\');??// 设置选项,浏览器信息两种方法出现同样的错误:Warning: curl_setopt(): supplied argument is not a valid cURL handle resource in **.php on line 23

测试抓取远程图片的时候,出现报错“invalid User-Agent header”,小编就直接说解决方法吧。把自定义http头放入hearders array, 然后用CURLOPT_HTTPHEADER设置。
设置如下:
$headers[] = 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0';
$headers[] = 'X-MicrosoftAjax: Delta=true';

其它更多相关设置,可参考:https://panxu.net/article/8389.html
参考技术A 我也出现过这样的错误 :之前的代码是这样的:
for(。。。。)
。。。。。。

curl_multi_remove_handle($mh, $ch[$m] );
curl_multi_close($mh);

运行后报错
curl_multi_remove_handle(): * is not a valid cURL Multi Handle resource
原来是过早关闭了批句柄。再改过来就好了。。。
for(。。。。)
。。。。。。。

curl_multi_remove_handle($mh, $ch[$m] );

curl_multi_close($mh);
参考技术B 参考:$header=array('Host:','User-Agent:Mozilla/5.0(Macintosh;IntelMacOSX10.10;rv:47.0)Gecko/20100101Firefox/47.0',);curl_setopt($ch,CURLOPT_HTTPHEADER,$header);关于phpcurl的使用,请参考我的博客《PHPcURL应用》链接:/php-curl 参考技术C [ol][*][*]curl_setopt($ch, CURLOPT_USERAGENT, \'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)\');[*][/ol]看一下,行不?:loveliness:

请教一个PHP CURL的POST提交遇到的问题

参考技术A 给你一个思路,使用http代替https,然后抓包,看一下http请求到底有什么不同.

另外,CURLOPT_SSL_VERIFYHOST官方文档有说明:

禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录
如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为
FALSE。

所以首先你的CURLOPT_SSL_VERIFYPEER是设置为false的,所以CURLOPT_SSL_VERIFYHOST也要为false

还有, 我看请求认证并不是使用http auth, 你为什么添加curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

最后,官方文档对于CURLOPT_POSTFIELDS的解释

如果value是一个数组,Content-Type头将会被设置成multipart/form-data

而接口文档中明确说明

请求接口(建议使用post请求,注意不要使用multipart-post):

所以你可以尝试

curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($data));

最后的最后,试试下面的代码:

<?php
header('Content-Type:text/html;charset=utf-8');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sendcloud.sohu.com/webapi/list.create.json');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = array(
'api_user' => '*',
'api_key' => '*',
'address' => 'runnerlee@maillist.sendcloud.org',
'name' => 'Abao新建的测试邮件列表',
'description' => '这是Abao新建的测试邮件列表',
);
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($data));
if(false === $result=curl_exec($ch))
echo 'false:<br />';

var_dump(json_decode($result,true));
curl_close($ch);

以上是关于请教一下cURL的User-Agent如何设置 - 技术问答的主要内容,如果未能解决你的问题,请参考以下文章

curl HTTP Header

我想请教一下,powershell的脚本之间如何传递全局变量。

动态ip代理:反网络爬虫之设置User-Agent的常规方法

请教用Curl 在php 里面模拟表单提交 文本+文件的写法

如何隐藏映射网络驱动器??请教一下

CURL命令