编 写:袁 亮
时 间:2015-07-10
说 明:curl高阶应用,模拟用户表单提交数据
一、应用场景
1、伪装用户登录,爬取需要登录才能访问的数据
2、提交表单,进行一些操作,比如自动发帖等,刷刷投票什么的
3、内部接口调用,模拟提交数据,作为参数
二、get传送
没什么好说的,直接在链接后面拼起来就好了
三、post数据传送
1、form表单提交数据,编码设置,直接参考w3cschool
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 "+" 加号,但不对特殊字符编码。
2、一般的表单项
2.1 采用的是第一编码方式
2.2 代码使用:
$data = array(
'title' => '大家好,我是新人,请多多关照',
'content' => '第一次来这边,发现好多东西好有帮助...',
);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//Post提交的数据包
3、文件上传
3.1 代码和上面一样
3.2 文件地址使用@符合加载绝对路径之前即可,先绝对路径,否则很容易出错
3.3 例如:
$data = array(
'title' => '大家好,我是新人,请多多关照',
'content' => '第一次来这边,发现好多东西好有帮助...',
'photo' => '@/opt/ci123/www/html/ciphot/demo.jpg',
);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//Post提交的数据包
3.4 还有个参数 CURLOPT_UPLOAD,没用过,有兴趣可以自己了解下
四、http basic验证
1、有些项目或者网站,访问的时候加了http basic验证,直接抓取会失败
2、知道账号密码的话,简单设置下即可
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
五、错误信息显示
1、在exec执行之后,如果出错,可以返回报错信息方便查看
$img = curl_exec($ch);
$err = curl_error($ch);
if($err){
return $err;
}
2、很少用,一般是在上传图片的时候,图片路径出错会出这个问题
3、curl抓取不到,请注意是否能ping的通域名,能否正常访问那个文件,ping一下,或者wget下那个地址
4、ipv6报错提示:curl: (6) Couldn't resolve host(域名能正常访问的话),设置使用ipv4的
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4)