1. 程式人生 > >php通過curl擴展進行模擬登錄(含驗證碼)

php通過curl擴展進行模擬登錄(含驗證碼)

程序 valid 做的 .cn ica ews fclose har user

  以下為本人工作中遇到的需要做的事情,之前也沒怎麽用過curl,查了好多資料,才稍微弄明白一點;本文所有內容只是自己平日工作的記錄,僅供大家參考:

<?php
/**
* 模擬登錄
*/
header("Content-type: text/html; charset=UTF-8");
//初始化變量
$cookie_file = "valid.tmp";
$login_url = "http://v3.gds.org.cn/login.aspx";
$verify_code_url = "http://v3.gds.org.cn/CheckCodeImg.aspx";

$curl = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //獲取COOKIE並存儲
$contents = curl_exec($curl);
curl_close($curl);

//取出驗證碼
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);

//保存驗證碼圖片
$fp = fopen("valid.jpg","wb");
fwrite($fp, $data);
fclose($fp);
//這裏取出驗證碼圖片後,程序休眠20s,這20s是用來手動查看驗證碼圖片,然後把驗證碼手動寫入當前目錄下的code.txt文件中,等待後續讀取
sleep(20);
//20s後開始讀取剛才手動寫入的驗證碼的TXT文件獲得驗證碼
/*可下載驗證碼識別工具類,從而識別驗證碼,此處不再細說*/
$code = file_get_contents(‘code.txt‘);

//登錄需要驗證的參數,根據登錄的網站要求而定
$post = array("__VIEWSTATE"=>‘/wEPDwUKMjAxNzc1MTA0OA9kFgICAQ8WAh4GYWN0aW9uBQsvbG9naW4uYXNweBYEAgcPDxYCHghJbWFnZVVybAUgL0NoZWNrQ29kZUltZy5hc3B4P2lkPTIxMTk2ODAxMDNkZAIJDw9kFgIeB29uY2xpY2sFH0phdmFTY3JpcHQ6cmV0dXJuIExvZ2luQ2hlY2soKTtkZGMVVyyy1MfXv5mlHnNYOwIzMjm+sDJyRNMHE9LcjvgY‘,
"__VIEWSTATEGENERATOR"=>‘C2EE9ABB‘,
"__EVENTVALIDATION"=>‘/wEdAAUvG4CEDSAeffIfvT8/poMSt93hYdIOB6Ps/2Dq0TZfLrmXzh32huUyxvIXSZRQCCzJEpGhdun6s5y0mjTOD9huCal3PlhY9+LhlDAz50G/x28L/2U/T7kobvkKwEbiPO6upzznZuwcFVVFFeC+TWWb‘,
"UserID"=>‘1444743‘,
"Pwd"=>‘405769‘,
"KeyCode"=>$code,
"BTM"=>‘‘);


$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POST,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);
?>

php通過curl擴展進行模擬登錄(含驗證碼)