curl阶段三:模拟用户表单提交数据


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

	

发表评论