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代碼如下:
- <?php
- $username="weichaoduo";//請改爲你的
- $password="密碼";//請改爲你的
- echo insert51Blog($username, $password);
- /**
- * 通過BLOG的 用戶名密碼以及當前用戶名,將3D形象秀FLASH插入到SINA BLOG中
- * @param String $login
- * @param String $password
- * @param String $cur_username
- * @return String "返回狀態"
- */
- function insert51Blog($login, $password,$cur_username)
- {
- $cookie_file="";
- $url = "http://passport.51.com/login.5p";
- //POST的數據
- $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";
- $cookie_file =$login."_cookie.txt";
- $img_url= "http://user.guodong.com/j/ji/jia/jiajia/230x330.jpg";
- $modul='[img]'.$img_url.'[/img]';//51插入的格式
- //第1步 登錄
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url); ;
- curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
- curl_setopt($ch, CURLOPT_POST, 1); //以POST方式提交
- curl_setopt($ch, CURLOPT_HEADER, 1); //要返回頭信息
- curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); //提交的數據
- curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); //保存cookie
- curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //發送cookie
- curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //需要獲得返回的內容
- $html = curl_exec($ch);
- //判斷是否登錄成功 ,如果包含alert說明用戶名密碼錯誤
- if(preg_match("/alert/",$html)){
- return "no";//username or password error
- }
- //第2步 提交數據
- $submit_url="http://my.51.com/user/userinfointro.php";
- $posts="bulletin=".urlencode($modul)."&action=save";
- curl_setopt($ch, CURLOPT_URL, $submit_url);
- curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);
- curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
- curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
- $html2 = curl_exec($ch);
- //log2($html2,"51.html");//將抓取內容輸出至一個文件中
- //如果返回內容包含passport則錯誤
- if(preg_match("/passport/",$html2)){
- return "no";//username or password error
- }
- return "ok";
- }
- ?>
執行該腳本後如果返回ok說明插入成功,打開51.com的個人主頁: http://home.51.com/weichaoduo 在“自我介紹”,顯示了要插入的圖片 。
:cool::cool::cool::cool::cool::cool: