国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

利用Php的CURL POST提交表單登錄實例詳解

2024-05-04 21:48:00
字體:
供稿:網(wǎng)友

例1,CURL使用POST提交XML數(shù)據(jù),代碼如下:

  1. $url = "http://m.survivalescaperooms.com";  
  2. <!--?xml version="1.0"?-->   
  3.  $ch = curl_init();  
  4. $header[] = "Content-type: text/xml";//定義content-type為xml  
  5. curl_setopt($ch, CURLOPT_URL, $url); //定義表單提交地址  
  6. curl_setopt($ch, CURLOPT_POST, 1);   //定義提交類型 1:POST ;0:GET  
  7. curl_setopt($ch, CURLOPT_HEADER, 1); //定義是否顯示狀態(tài)頭 1:顯示 ; 0:不顯示  
  8. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//定義請求類型  
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);//定義是否直接輸出返回流  
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //定義提交的數(shù)據(jù),這里是XML文件  
  11.  curl_close($ch);//關(guān)閉 

在PHP中CURL使用POST提交XML數(shù)據(jù)時,一定要定義content-type為xml,要不然默認是text/html.

例2,post表單數(shù)據(jù),curl是利用URL語法在命令行方式下工作的文件傳輸工具,代碼如下:

  1. set_time_limit(0); 
  2. @date_default_timezone_set('Asia/Shanghai'); 
  3. function curlrequest($url,$postfield,$proxy=""){ 
  4. $proxy=trim($proxy); 
  5. $user_agent ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
  6. $ch = curl_init();    // 初始化CURL句柄 
  7. if(!emptyempty($proxy)){ 
  8. curl_setopt ($ch, CURLOPT_PROXY, $proxy);//設(shè)置代理服務器 
  9. curl_setopt($ch, CURLOPT_URL, $url); //設(shè)置請求的URL 
  10. //curl_setopt($ch, CURLOPT_FAILONERROR, 1); // 啟用時顯示HTTP狀態(tài)碼,默認行為是忽略編號小于等于400的HTTP信息 
  11. //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//啟用時會將服務器服務器返回的“Location:”放在header中遞歸的返回給服務器 
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);// 設(shè)為TRUE把curl_exec()結(jié)果轉(zhuǎn)化為字串,而不是直接輸出 
  13. curl_setopt($ch, CURLOPT_POST, 1);//啟用POST提交 
  14. curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield); //設(shè)置POST提交的字符串 
  15. //curl_setopt($ch, CURLOPT_PORT, 80); //設(shè)置端口 
  16. curl_setopt($ch, CURLOPT_TIMEOUT, 25); // 超時時間 
  17. curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);//HTTP請求User-Agent:頭 
  18. //curl_setopt($ch,CURLOPT_HEADER,1);//設(shè)為TRUE在輸出中包含頭信息 
  19. //$fp = fopen("example_homepage.txt", "w");//輸出文件 
  20. //curl_setopt($ch, CURLOPT_FILE, $fp);//設(shè)置輸出文件的位置,值是一個資源類型,默認為STDOUT (瀏覽器)。 
  21. curl_setopt($ch,CURLOPT_HTTPHEADER,array
  22. 'Accept-Language: zh-cn'
  23. 'Connection: Keep-Alive'
  24. 'Cache-Control: no-cache' 
  25. ));//設(shè)置HTTP頭信息 
  26. $document = curl_exec($ch); //執(zhí)行預定義的CURL 
  27. $info=curl_getinfo($ch); //得到返回信息的特性 
  28. //print_r($info); 
  29. if($info[http_code]=="405"){ 
  30. echo "bad proxy {$proxy}n";  //代理出錯 
  31. exit
  32. //curl_close($ch); 
  33. return $document
  34. //請求URL 
  35. $url="http://example.cn/getInfo.php"
  36. //POST提交數(shù)據(jù),可用HTTPWATCH查看 
  37. $postfield="userName=test&year=2008&passWord=123456&Submit=%CC%E1%BD%BB"
  38. //代理服務器 
  39. $proxy = ''
  40. //請求 
  41. $str=curlrequest($url,$postfield,$proxy); 
  42. //輸出結(jié)果 
  43. echo $str;  

例3,一個簡單利用curl post登錄實例.

模擬post登陸提交表單問題

SOOPY類:之前寫過一個程序是模擬post來推送一些資源,起初跟大家一樣,各種百度谷歌,首先想到的就是用PHP自帶的庫CURL這個來模擬,自己想偷偷懶看有沒有更簡單的類來實現(xiàn)呢?還是被我發(fā)現(xiàn)了,他就是snoopy類.(中文名史盧比),代碼如下:

  1. //首先要引用這個類  
  2. include("/data/tools/pooy/Snoopy/Snoopy.class.php");  
  3. $snoopy = new Snoopy;  
  4. //$Parameters這個是要提交的數(shù)組  
  5. $Parameters["username"] = "user";  
  6. $Parameters["pass"] = "pass";  
  7. $file = "/test/test.jpg";  
  8. $serviceUrl = "http://www.你的地址/fileProcess.php";  
  9. $postfiles["image"] = $file//$filename上傳文件相對路徑 例如"upload/taoav.jpg";image/jpg  
  10. $snoopy->_submit_type = "multipart/form-data"//設(shè)定submit類型  
  11. $snoopy->submit($serviceUrl,$Parameters,$postfiles); 
  12. //$postforms,$postfiles為2中類型的值,其中$postfiles為上傳文件數(shù)組 

上面這個例子就是實現(xiàn)了一個POST表單提交的案例,由于需求比較復雜,這個snoopy的功能不能滿足于我的需求,于是又開始去進攻CURL.

CURL擴展庫:這個庫是比較成熟的一個擴展庫,功能很強大,強大到可以模擬瀏覽器的任何一個動作,需求是這樣子的,第一登陸一個網(wǎng)站后臺,第二接口頁面,然后開始推送大量資源,這里面的具體邏輯就縮略了,為了操作方便,我把我需要模擬的幾個函數(shù)封裝到了一個類里面,簡短代碼如下:

  1. /*  
  2.      模擬資源推送類  
  3.      2012-09-14 by POOY  
  4. */ 
  5. class TuisongPost{  
  6.    
  7.      //用構(gòu)造登陸認證  
  8.      function TuisongPost(){  
  9.    
  10.           //存放COOKIE的文件  
  11.           global $cookie_jar;  
  12.           $this->cookie_jar = tempnam('./tmp','cookie');  
  13.           $url = "http://www.你的地址";  
  14.    
  15.           $post_data = array"username" => "admin","password" => "admin" );  
  16.    
  17.           $ch = curl_init();  
  18.    
  19.           curl_setopt($ch, CURLOPT_URL, $url);  
  20.    
  21.           curl_setopt($ch, CURLOPT_POST, 1);  
  22.    
  23.           curl_setopt($ch, CURLOPT_HEADER, 1);  
  24.    
  25.           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  
  26.    
  27.           curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);    
  28.    
  29.           curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_jar);  //保存cookie信息  
  30.    
  31.           $output1 = curl_exec($ch);  
  32.    
  33.           curl_close($ch);  
  34.    
  35.           //echo $this->cookie_jar."n";  
  36.      }  
  37.      /*得到組ID*/      
  38.      function getGid($groupname,$channel,$lanmu){  
  39.    
  40.           $url = "http://XXXX.com/creategroup";  
  41.    
  42.           //格式化要推送的數(shù)據(jù)  
  43.           $data = $this->getGidArr($groupname,$channel,$lanmu);  
  44.    
  45.           $ch = curl_init();  
  46.    
  47.           $Ref_url = "http://www.你的地址";  
  48.    
  49.           curl_setopt($ch, CURLOPT_URL, $url);  
  50.    
  51.           curl_setopt($ch, CURLOPT_REFERER, $Ref_url);       //偽裝REFERER  
  52.    
  53.           curl_setopt($ch, CURLOPT_POST, 1);   //post方式提交數(shù)據(jù)  
  54.    
  55.           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //返回數(shù)據(jù),而不是直接輸出  
  56.    
  57.           curl_setopt($ch, CURLOPT_HEADER, 0);   // 設(shè)置是否顯示header信息 0是不顯示,1是顯示  默認為0  
  58.    
  59.           curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar);  //發(fā)送cookie文件  
  60.    
  61.           curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //發(fā)送POST數(shù)據(jù)  
  62.    
  63.           $output2 = curl_exec($ch);    //發(fā)送HTTP請求  
  64.    
  65.           //這個返回值是用作判斷的依據(jù)  
  66.           return $output2;  
  67.           curl_close($ch);  
  68.           //$this->unlink($this->cookie_jar);  
  69.      }       
  70.    
  71.      //推送數(shù)據(jù)  
  72.      function sendPic($note,$groupid,$groupindex,$img){  
  73.    
  74.           $url = "http://XXXX/addimage";  
  75.    
  76.           $groupid = intval($groupid);  
  77.           $data = $this->sendPicArr($note,$groupid,$groupindex,$img);  
  78.    
  79.           $ch = curl_init();  
  80.    
  81.           $Ref_url = "http://www.你的地址";  
  82.    
  83.           curl_setopt($ch, CURLOPT_URL, $url);  
  84.    
  85.           curl_setopt($ch, CURLOPT_REFERER, $Ref_url);       //偽裝REFERER  
  86.    
  87.           curl_setopt($ch, CURLOPT_POST, 1);   //post方式提交數(shù)據(jù)  
  88.    
  89.           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //返回數(shù)據(jù),而不是直接輸出  
  90.    
  91.           curl_setopt($ch, CURLOPT_HEADER, 0);   // 設(shè)置是否顯示header信息 0是不顯示,1是顯示  默認為0  
  92.    
  93.           curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar);  //發(fā)送cookie文件  
  94.    
  95.           curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //發(fā)送POST數(shù)據(jù)  
  96.    
  97.           $output2 = curl_exec($ch);    //發(fā)送HTTP請求  
  98.           return $output2 ;  
  99.           curl_close($ch);  
  100.           //$this->unlink($this->cookie_jar);  
  101.      }       
  102.    
  103.      /*推送數(shù)據(jù)操作*/      
  104.      function sendMes($url,$img,$imgdesc,$groupid,$groupname,$channel,$lanmu)  
  105.      {  
  106.           //var_dump($this->cookie_jar);  
  107.           //exit();  
  108.           $url = "http://XXXX/add";  
  109.    
  110.           $data = $this->getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu);  
  111.    
  112.           $ch = curl_init();  
  113.    
  114.           $Ref_url = "http://www.你的地址";  
  115.    
  116.           curl_setopt($ch, CURLOPT_URL, $url);  
  117.    
  118.           curl_setopt($ch, CURLOPT_REFERER, $Ref_url);       //偽裝REFERER  
  119.    
  120.           curl_setopt($ch, CURLOPT_POST, 1);   //post方式提交數(shù)據(jù)  
  121.    
  122.           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //返回數(shù)據(jù),而不是直接輸出  
  123.    
  124.           curl_setopt($ch, CURLOPT_HEADER, 0);   // 設(shè)置是否顯示header信息 0是不顯示,1是顯示  默認為0  
  125.    
  126.           curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar);  //發(fā)送cookie文件  
  127.    
  128.           curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   //發(fā)送POST數(shù)據(jù)  
  129.    
  130.           $output2 = curl_exec($ch);    //發(fā)送HTTP請求  
  131.    
  132.           curl_close($ch);  
  133.           //$this->unlink($this->cookie_jar);  
  134.      }       
  135.    
  136.      function getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu)  
  137.      {  
  138.           $post_data = array(  
  139.                                    //windows使用如下寫法,linux不適用  
  140.                                    //"img"=>"@".$img.";type=image/jpeg",  
  141.                                    "img"=>"@".$img,  
  142.                                    "imgdesc"=>$imgdesc,  
  143.                                    "groupid"=>$groupid,  
  144.                                    "groupname"=>$groupname,  
  145.                                    "channel"=>$channel,  
  146.                                    "lanmu"=>$lanmu,  
  147.                                    "cdate"=>date('Y-m-d')                 
  148.           );  
  149.           return $post_data;  
  150.      }       
  151.      //格式化getGidArr  
  152.      function getGidArr($groupname,$channel,$lanmu)  
  153.      {            
  154.           $post_data = array(  
  155.                                    "groupname"=>$groupname,  
  156.                                    "channel"=>$channel,  
  157.                                    "lanmu"=>$lanmu,  
  158.                                    "cdate"=>date('Y-m-d')                 
  159.           );  
  160.           return $post_data;  
  161.      }       
  162.      //格式化sendPicArr  
  163.      function sendPicArr($note,$groupid,$groupindex,$img)  
  164.      {  
  165.           $post_data = array(  
  166.                                    "notes"=>$note,  
  167.                                    "id"=>$groupid,  
  168.                                    "index"=>$groupindex,  
  169.                                    "cdate"=>date('Y-m-d'),  
  170.                                    //windows使用如下寫法,linux不適用  
  171.                                    //"img"=>"@".$img.";type=image/jpeg",  
  172.                                    "img"=>"@".$img           
  173.           );  
  174.           return $post_data;  
  175.      }  
  176.    
  177.      //清理cookie文件  
  178.      function unlink($cookie_jar){  
  179.        unlink($cookie_jar);   
  180.      }  
  181. }  

以上就是用CURL來完美解決了這個問題,他能有效的解決cookie存儲問題.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 弥勒县| 普安县| 同仁县| 平度市| 石家庄市| 安西县| 阳新县| 庄河市| 滁州市| 山西省| 营口市| 沽源县| 十堰市| 高邮市| 临沭县| 固阳县| 永春县| 济宁市| 高要市| 浏阳市| 贞丰县| 政和县| 东丰县| 沭阳县| 任丘市| 礼泉县| 商水县| 平湖市| 古蔺县| 南宫市| 惠安县| 揭阳市| 灵寿县| 郎溪县| 伊宁市| 五寨县| 江安县| 昭通市| 胶州市| 甘谷县| 建水县|