编 写:袁 亮 时 间: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)