fakelogin.php//模擬post提交
$url=''; //表單的action處理程式 unset($post_data); $post_data['username'] = "name"; //帳號 $post_data['password'] = "pass"; //密碼 $post_data['type'] = "***"; //登入表單的其他域內容..下略 $post_data['formaction'] = "user_login"; $o=""; //組織post資料 foreach ($post_data as $k=>$v) $o.= "$k=".urlencode($v)."&"; $o=substr($o,0,-1); //去掉最後乙個& $ch = curl_init(); //curl物件 curl_setopt($ch, curlopt_post, 1); //method post curl_setopt($ch, curlopt_postfields, $o);//post的資料 curl_setopt($ch, curlopt_returntransfer, 1); //返回的html原始碼(1表示輸出,0表示不輸出) curl_setopt($ch, curlopt_header, 1); //返回內容包含header curl_setopt($ch, curlopt_url,$url); //提交位址 curl_setopt($ch, curlopt_cookiejar, 'e:/webroot/f/cookie.txt'); //儲存cookie $result = curl_exec($ch); //提交登入獲取登入結果 file_put_contents("logined.txt",$result); //debug_ 把結果儲存到檔案檢視至此 的登入ok了
之後訪問 x**只需要
readdata.php
$url = ""; //要抓取原始碼的url$ch = curl_init(); //curl物件 curl_setopt($ch, curlopt_returntransfer, 1); //返回的html原始碼(1表示輸出,0表示不輸出) curl_setopt($ch, curlopt_header, 0); //返回內容: 1 包含header; 0 不包含 curl_setopt($ch, curlopt_url,$url); //要抓取原始碼 curl_setopt($ch, curlopt_cookiefile,'e:/webroot/f/cookie.txt'); // 讀取已儲存的cookie資訊 $result = curl_exec($ch); $result = iconv("gbk","utf-8//ignore",$result); //**原本是gbk編碼,轉換成utf-8便於之後處理 file_put_contents("data.txt",$result); //debug 把原始碼儲存到檔案
接著有點棘手的是其實要抓取的內容在 www.yyyy.com **
而 x**和y**之間的登入是怎麼整合的呢?
使用者在瀏覽器的操作方式是 x**登陸成功,點某個跳轉的link -> 去到y**
後面"no"引數用base64 decode 之後發現是使用者名稱
如果直接用瀏覽器開啟這個link的話發現是不能登入的,就是說伺服器端用了session或cookies的方式做校驗
嘗試獲取這條link ,繼續在上面的 readdata.php **修改
$url = ""; $ch = curl_init(); //curl物件 curl_setopt($ch, curlopt_returntransfer, 1); //返回的html原始碼(1表示輸出,0表示不輸出) curl_setopt($ch, curlopt_header, 0); //返回內容: 1 包含header; 0 不包含 curl_setopt($ch, curlopt_url,$url); //要抓取原始碼 curl_setopt($ch, curlopt_cookiefile,'e:/webroot/f/cookie.txt'); // 讀取已儲存的cookie資訊 $result = curl_exec($ch); $result = iconv("gbk","utf-8//ignore",$result); //**原本是gbk編碼,轉換成utf-8便於之後處理 file_put_contents("data.txt",$result); //debug 把原始碼儲存到檔案再看 data.txt 空白,什麼也沒有,但瀏覽器來操作的話這步會自動跳轉到y**,猜測是在 header 做了 location 跳轉
將上述**改動一行
curl_setopt($ch, curlopt_header, 1);
執行後檢視data.txt 內容:
//...以上內容略,接上一段原始碼 //獲取header location 新位址 $newurl = strstr($result,"http://"); $newurl = substr($newurl,0,strpos($newdomain,"\n")-1); curl_setopt($ch, curlopt_cookiejar, 'e:/webroot/f/cookie2.txt'); //把y站的cookies儲存到 cookies2.txt,不過連著以上**的話,其實這份cookies同時包含了 x站和y站的cookies資訊 curl_setopt($ch, curlopt_url,$newurl); //登入y站 $result = curl_exec($ch); //獲取登入y站的結果,和cookies大功告成,之後訪問y站時只需要
curl_setopt($ch, curlopt_cookiefile,'e:/webroot/f/cookie2.txt'); 就能以已登入的身份獲取資訊.
要模擬一鍵登入,將 fakelogin.php 和readdata.php 兩檔案的**合併在一起就可以直接完成 x**登入,跳轉到y站同時登入。
只要在cookies和session未超時的一段時間內,怎樣操作悉隨尊便.
*備忘:如果 curl_setopt 的 curlopt_returntransfer 變數 0 的話,就不會返回原始碼,能節省傳入的流量,只返回單個字元"1".
PHP CURL模擬登入 獲取資料
使用了curl 模擬登入 測試了公司 記錄下來 模擬登入方法 function login post url,cookie,post 登入成功後獲取資料 function get content url,cookie tempnam 函式建立乙個具有唯一檔名的臨時檔案。cookie tempnam ...
PHP CURL獲取cookies模擬登入的方法
要提取google搜尋的部分資料,發現google對於軟體抓取它的資料遮蔽的厲害,以前偽造下 user agent 就可以抓資料,但是現在卻不行了。利用抓包資料發現,google 判斷了 cookies,當你沒有cookies的時候,直接返回 302 跳轉,而且是連續幾十個302跳轉,根本抓不了資料...
php curl 模擬登入獲取資料
1 登入 獲取登入cookie public function getcookie url,data params curlopt cookiejar cookie jar 儲存接收cookie路徑到當前上下文的cookie中 setcookie jsessionid cookie jar ch c...