用curl登錄51.com及插入圖片的例子

CURL 是 Client URL Library Functions 的縮寫,由 Daniel Stenberg 創建,更多內容可以參考其官方網站或PHP手冊。利用CURL可以非常方便的抓取互聯網上的信息。個人使用的經驗證明:相對於PHP的fopen,readfile 和 Socket 函數, CURL的執行速度和消耗資源明顯要低許多。
下面做個用curl登錄51.com及插入圖片的例子,插入圖片,是將一張圖片插入到51.com的個人介紹中去,希望對大家有幫助。

開始之前,要熟悉CURL的一些函數,如curl_init(),curl_setopt(),curl_exec(). 這裏說一下curl_setopt()函數,這個函數其實就是設置一些瀏覽器中內置功能,如如何 發送/接收cookies,POST/GET數據,網頁頭信息等設置。更多內容參考PHP手冊。

另外最好有 IE的Http watch工具,用於抓取HTTP傳輸的包信息,非常好用,是互聯網開發強力工具,推薦使用。

步驟1,用IE的Http watch抓取登錄和插入圖片的包:
通過Http watch我們可以清楚的看到要登錄51.com只需要,POST用戶名密碼和一些附帶參數即可。另外還有做個cookie操作,以保持登錄狀態,爲後面插入圖片準備。
完整的CURL代碼如下:

 


 

  1. <?php
  2. $username="weichaoduo";//請改爲你的
  3. $password="密碼";//請改爲你的
  4. echo insert51Blog($username$password);
  5. /**
  6.  * 通過BLOG的 用戶名密碼以及當前用戶名,將3D形象秀FLASH插入到SINA BLOG中
  7.  * @param String $login
  8.  * @param String $password
  9.  * @param String $cur_username
  10.  * @return String "返回狀態"
  11.  */
  12. function insert51Blog($login$password,$cur_username)
  13. {
  14.  $cookie_file="";
  15.  $url = "http://passport.51.com/login.5p"
  16.  //POST的數據
  17.  $fields="passport_51_user=$login&passport_51_password=$password&gourl=http%3A%2F%2Fmy.51.com%2Fwebim%2Findex.php%3Frefer%3D%2F&submit.x=47&submit.y=21";
  18.     
  19.  $cookie_file =$login."_cookie.txt"
  20.  $img_url"http://user.guodong.com/j/ji/jia/jiajia/230x330.jpg";
  21.  $modul='[img]'.$img_url.'[/img]';//51插入的格式 
  22.  //第1步 登錄
  23.  $ch = curl_init();
  24.  curl_setopt($ch, CURLOPT_URL, $url);  ;
  25.  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
  26.  curl_setopt($ch, CURLOPT_POST, 1);                           //以POST方式提交
  27.  curl_setopt($ch, CURLOPT_HEADER, 1);                       //要返回頭信息
  28.  curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);         //提交的數據
  29.  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  //保存cookie
  30.  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //發送cookie 
  31.  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);        //需要獲得返回的內容
  32.  $html = curl_exec($ch);
  33.     //判斷是否登錄成功 ,如果包含alert說明用戶名密碼錯誤
  34.  if(preg_match("/alert/",$html)){
  35.   return "no";//username or password error
  36.  }
  37.    
  38.  //第2步 提交數據
  39.   $submit_url="http://my.51.com/user/userinfointro.php";
  40.   $posts="bulletin=".urlencode($modul)."&action=save"
  41.   curl_setopt($ch, CURLOPT_URL, $submit_url);  
  42.  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
  43.  curl_setopt($ch, CURLOPT_POST, 1);
  44.  curl_setopt($ch, CURLOPT_HEADER, 0);
  45.  curl_setopt($ch, CURLOPT_POSTFIELDS, $posts); 
  46.  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  47.  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  48.  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  49.     $html2 = curl_exec($ch);
  50.  //log2($html2,"51.html");//將抓取內容輸出至一個文件中
  51.  //如果返回內容包含passport則錯誤
  52.  if(preg_match("/passport/",$html2)){
  53.   return "no";//username or password error
  54.  }
  55.     return "ok";
  56. }
  57. ?>

執行該腳本後如果返回ok說明插入成功,打開51.com的個人主頁: http://home.51.com/weichaoduo 在“自我介紹”,顯示了要插入的圖片 。

 

:cool::cool::cool::cool::cool::cool:

發佈了39 篇原創文章 · 獲贊 2 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章