php版:
<?php<br />$cookie_file = fopen('cookie.txt','w');//dirname(__FILE__)."/cookie_".md5(basename(__FILE__)).".txt"; // 設定Cookie檔案儲存路徑及檔案名稱 </p><p>function vlogin($url,$data){ // 類比登入擷取Cookie函數<br /> $curl = curl_init(); // 啟動一個CURL會話<br /> curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址<br /> curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查<br /> curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在<br /> curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器<br /> curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉<br /> curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer<br /> curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求<br /> curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的資料包<br /> curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']); // 存放Cookie資訊的檔案名稱<br /> curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 讀取上面所儲存的Cookie資訊<br /> curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈<br /> curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容<br /> curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回<br /> $tmpInfo = curl_exec($curl); // 執行操作<br /> if (curl_errno($curl)) {<br /> echo 'Errno'.curl_error($curl);<br /> }<br /> curl_close($curl); // 關閉CURL會話<br /> return $tmpInfo; // 返回資料<br />} </p><p>function vget($url){ // 類比擷取內容函數<br /> $curl = curl_init(); // 啟動一個CURL會話<br /> curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址<br /> curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查<br /> curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在<br /> curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器<br /> curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉<br /> curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer<br /> curl_setopt($curl, CURLOPT_HTTPGET, 1); // 發送一個常規的Post請求<br /> curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 讀取上面所儲存的Cookie資訊<br /> curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈<br /> curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容<br /> curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回<br /> $tmpInfo = curl_exec($curl); // 執行操作<br /> if (curl_errno($curl)) {<br /> echo 'Errno'.curl_error($curl);<br /> }<br /> curl_close($curl); // 關閉CURL會話<br /> return $tmpInfo; // 返回資料<br />} </p><p>function vpost($url,$data){ // 類比提交資料函數<br /> $curl = curl_init(); // 啟動一個CURL會話<br /> curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址<br /> curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查<br /> curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在<br /> curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器<br /> curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉<br /> curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer<br /> curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求<br /> curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的資料包<br /> curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 讀取上面所儲存的Cookie資訊<br /> curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈<br /> curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容<br /> curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回<br /> $tmpInfo = curl_exec($curl); // 執行操作<br /> if (curl_errno($curl)) {<br /> echo 'Errno'.curl_error($curl);<br /> }<br /> curl_close($curl); // 關鍵CURL會話<br /> return $tmpInfo; // 返回資料<br />} </p><p>function delcookie($cookie_file){ // 刪除Cookie函數<br /> @unlink($cookie_file); // 執行刪除<br />} </p><p>// 使用執行個體<br />if(!file_exists($cookie_file)) { // 檢測Cookie是否存在<br />vlogin('http://example.com/login_do.asp','id=xxx&password=xxx'); // 登入擷取Cookie<br />}<br />echo vget('http://example.com/upload_new.asp');<br />delcookie($cookie_file);<br />?><br />
python版(1):使用urllib和cookielib
import urllib<br />import urllib2<br />import cookielib<br />def xxxFunc():<br /> """</p><p> """<br /> ck = cookielib.LWPCookieJar()<br /> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ck))<br /> opener.addheaders = [('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 528; POTU(RR:28031409:0:5491841); Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30)')]<br /> opener.addheaders = [('Accept', '*/*')]<br /> opener.addheaders = [('Accept-Language', 'zh-cn')]<br /> opener.addheaders = [('Accept-Encoding', 'gzip, deflate')]<br /> opener.addheaders = [('Connection', 'Keep-Alive')]<br /> opener.addheaders = [('Cache-Control', 'no-cache')]<br /> urllib2.install_opener(opener)<br /> url_login = 'http://xxx.net/login'<br /> body = (('id','xxx'), ('pw','xxx'))<br /> req = urllib.urlopen(url_login,urllib.urlencode(body))<br /> req = urllib2.urlopen('http://xxx.net/post')
python版(2):使用ClientCookie
import ClientCookie<br />request = ClientCookie.Request("https://example.com/?login&username=xxx&password=xxx")<br />response = ClientCookie.urlopen(request)<br />request2 = ClientCookie.Request("http://example.com/xxx")<br />response2 = ClientCookie.urlopen(request2)<br />print response2.read()<br />
上述的方法對於一般的網站都能夠類比登陸,達到預期的目的,不過我想類比登陸的網站很遺憾沒能成功,cookie儲存不下來。