模拟post登陆提交表单问题详解

模拟post登陆提交表单问题

SOOPY类:
之前写过一个程序是模拟post来推送一些资源
起初跟大家一样,各种百度谷歌,首先想到的就是用PHP自带的库CURL这个来模拟
自己想偷偷懒看有没有更简单的类来实现呢?
还是被我发现了,他就是snoopy类。(中文名史卢比)
//首先要引用这个类
include("/data/tools/pooy/Snoopy/Snoopy.class.php");
$snoopy = new Snoopy;
//$Parameters这个是要提交的数组
$Parameters["username"] = "user";
$Parameters["pass"] = "pass";
$file = "/test/test.jpg";
$serviceUrl = "http://www.pooy.net/fileProcess.php";
$postfiles["image"] = $file; //$filename上传文件相对路径 例如"upload/taoav.jpg";image/jpg
$snoopy->_submit_type = "multipart/form-data"; //设定submit类型
$snoopy->submit($serviceUrl,$Parameters,$postfiles);

//$postforms,$postfiles为2中类型的值,其中$postfiles为上传文件数组

   上面这个例子就是实现了一个POST表单提交的案例。由于需求比较复杂,这个snoopy的功能不能满足于我的需求,于是又开始
去进攻CURL。
CURL扩展库:
这个库是比较成熟的一个扩展库,功能很强大。强大到可以模拟浏览器的任何一个动作。
需求是这样子的:
     第一登陆一个网站后台
     第二接口页面,然后开始推送大量资源
     (这里面的具体逻辑就缩略了)
为了操作方便,我把我需要模拟的几个函数封装到了一个类里面,简短代码如下:
/*
     模拟资源推送类
     2012-09-14 by POOY
*/
class TuisongPost{
 
     //用构造登陆认证
     function TuisongPost(){
 
          //存放COOKIE的文件
          global $cookie_jar;
          $this->cookie_jar = tempnam('./tmp','cookie');
          $url = "http://www.pooy.net";
 
          $post_data = array( "username" => "admin","password" => "admin" );
 
          $ch = curl_init();
 
          curl_setopt($ch, CURLOPT_URL, $url);
 
          curl_setopt($ch, CURLOPT_POST, 1);
 
          curl_setopt($ch, CURLOPT_HEADER, 1);
 
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
 
          curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  
 
          curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_jar);  //保存cookie信息
 
          $output1 = curl_exec($ch);
 
          curl_close($ch);
 
          //echo $this->cookie_jar."\n";
     }
     /*得到组ID*/    
     function getGid($groupname,$channel,$lanmu){
 
          $url = "http://XXXX.com/creategroup";
 
          //格式化要推送的数据
          $data = $this->getGidArr($groupname,$channel,$lanmu);
 
          $ch = curl_init();
 
          $Ref_url = "http://www.pooy.net";
 
          curl_setopt($ch, CURLOPT_URL, $url);
 
          curl_setopt($ch, CURLOPT_REFERER, $Ref_url);       //伪装REFERER
 
          curl_setopt($ch, CURLOPT_POST, 1);   //post方式提交数据
 
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //返回数据,而不是直接输出
 
          curl_setopt($ch, CURLOPT_HEADER, 0);   // 设置是否显示header信息 0是不显示,1是显示  默认为0
 
          curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar);  //发送cookie文件
 
          curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //发送POST数据
 
          $output2 = curl_exec($ch);    //发送HTTP请求
 
          //这个返回值是用作判断的依据
          return $output2;
          curl_close($ch);
          //$this->unlink($this->cookie_jar);
     }     
 
     //推送数据
     function sendPic($note,$groupid,$groupindex,$img){
 
          $url = "http://XXXX/addimage";
 
          $groupid = intval($groupid);
          $data = $this->sendPicArr($note,$groupid,$groupindex,$img);
 
          $ch = curl_init();
 
          $Ref_url = "http://www.pooy.net";
 
          curl_setopt($ch, CURLOPT_URL, $url);
 
          curl_setopt($ch, CURLOPT_REFERER, $Ref_url);       //伪装REFERER
 
          curl_setopt($ch, CURLOPT_POST, 1);   //post方式提交数据
 
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //返回数据,而不是直接输出
 
          curl_setopt($ch, CURLOPT_HEADER, 0);   // 设置是否显示header信息 0是不显示,1是显示  默认为0
 
          curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar);  //发送cookie文件
 
          curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //发送POST数据
 
          $output2 = curl_exec($ch);    //发送HTTP请求
          return $output2 ;
          curl_close($ch);
          //$this->unlink($this->cookie_jar);
     }     
 
     /*推送数据操作*/    
     function sendMes($url,$img,$imgdesc,$groupid,$groupname,$channel,$lanmu)
     {
          //var_dump($this->cookie_jar);
          //exit();
          $url = "http://XXXX/add";
 
          $data = $this->getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu);
 
          $ch = curl_init();
 
          $Ref_url = "http://www.pooy.net";
 
          curl_setopt($ch, CURLOPT_URL, $url);
 
          curl_setopt($ch, CURLOPT_REFERER, $Ref_url);       //伪装REFERER
 
          curl_setopt($ch, CURLOPT_POST, 1);   //post方式提交数据
 
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //返回数据,而不是直接输出
 
          curl_setopt($ch, CURLOPT_HEADER, 0);   // 设置是否显示header信息 0是不显示,1是显示  默认为0
 
          curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar);  //发送cookie文件
 
          curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //发送POST数据
 
          $output2 = curl_exec($ch);    //发送HTTP请求
 
          curl_close($ch);
          //$this->unlink($this->cookie_jar);
     }     
 
     function getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu)
     {
          $post_data = array(
                                   //windows使用如下写法,linux不适用
                                   //"img"=>"@".$img.";type=image/jpeg",
                                   "img"=>"@".$img,
                                   "imgdesc"=>$imgdesc,
                                   "groupid"=>$groupid,
                                   "groupname"=>$groupname,
                                   "channel"=>$channel,
                                   "lanmu"=>$lanmu,
                                   "cdate"=>date('Y-m-d')               
          );
          return $post_data;
     }     
     //格式化getGidArr
     function getGidArr($groupname,$channel,$lanmu)
     {          
          $post_data = array(
                                   "groupname"=>$groupname,
                                   "channel"=>$channel,
                                   "lanmu"=>$lanmu,
                                   "cdate"=>date('Y-m-d')               
          );
          return $post_data;
     }     
     //格式化sendPicArr
     function sendPicArr($note,$groupid,$groupindex,$img)
     {
          $post_data = array(
                                   "notes"=>$note,
                                   "id"=>$groupid,
                                   "index"=>$groupindex,
                                   "cdate"=>date('Y-m-d'),
                                   //windows使用如下写法,linux不适用
                                   //"img"=>"@".$img.";type=image/jpeg",
                                   "img"=>"@".$img         
          );
          return $post_data;
     }
 
     //清理cookie文件
     function unlink($cookie_jar){
       unlink($cookie_jar); 
     }
}
以上就是用CURL来完美解决了这个问题,他能有效的解决cookie存储问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值