php 自動登入 類比登陸 擷取源碼
業務需求:
能夠通過php指令碼實現網頁自動登入,擷取登陸後頁面的內容。
現在在網上找到以下這個程式,可是在驗證的過程中發現未能成功,請各位高手給看看,謝謝。
class CURL
{
var $cookie_file; // 設定Cookie檔案儲存路徑及檔案名稱
var $loginurl;//登陸地地址
var $actionstr;//登陸參數
function __construct()
{
$this->cookie_file=dirname(__FILE__)."/cookie_".md5(basename(__FILE__)).".txt";
if(!file_exists($this->cookie_file))
{ // 檢測Cookie是否存在
$str = $this->vget('jroam'); // 擷取登入隨機值
preg_match("/name=\"formhash\" value=\"(.*?)\"/is",$str,$hash); // 提取登入隨機值
$this->vlogin($this->loginurl,$this->actionstr); // 登入擷取Cookie
}
}
function vlogin($url,$data){ // 類比登入擷取Cookie函數
$curl = curl_init(); // 啟動一個CURL會話
curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer
curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的資料包
curl_setopt($curl, CURLOPT_COOKIEJAR, $this->cookie_file); // 存放Cookie資訊的檔案名稱
curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookie_file); // 讀取上面所儲存的Cookie資訊
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈
curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回
$tmpInfo = curl_exec($curl); // 執行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 關閉CURL會話
return $tmpInfo; // 返回資料
}
function vget($url){ // 類比擷取內容函數
$curl = curl_init(); // 啟動一個CURL會話
curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer
curl_setopt($curl, CURLOPT_HTTPGET, 1); // 發送一個常規的Post請求
curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookie_file); // 讀取上面所儲存的Cookie資訊
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈
curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回
$tmpInfo = curl_exec($curl); // 執行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 關閉CURL會話
return $tmpInfo; // 返回資料
}
function vpost($url,$data){ // 類比提交資料函數
$curl = curl_init(); // 啟動一個CURL會話
curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證認證來源的檢查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從認證中檢查SSL密碼編譯演算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 類比使用者使用的瀏覽器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動化佈建Referer
curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的資料包
curl_setopt($curl, CURLOPT_COOKIEFILE, $this->cookie_file); // 讀取上面所儲存的Cookie資訊
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定逾時限制防止死迴圈
curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header地區內容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 擷取的資訊以檔案流的形式返回
$tmpInfo = curl_exec($curl); // 執行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);
}
curl_close($curl); // 關鍵CURL會話
return $tmpInfo; // 返回資料
}
function delcookie($cookie_file){ // 刪除Cookie函數
@unlink($cookie_file); // 執行刪除
}
}
//應用執行個體
$mycurl=new CURL();
$mycurl->loginurl="http://192.168.0.2/login.php";//登陸地址
$mycurl->actionstr="user_name=111&uspassword=1234";//參數串;
$url1='http://192.168.0.2/userlist.php";
$htmlcontent= $mycurl->vget($url1); //輸出目標地址源碼
echo $htmlcontent;
?>
回複討論(解決方案)
補充說明下,是在linux平台環境中。
請確認你傳遞了正確的參數
$url1='http://192.168.0.2/userlist.php ";
ErrnoCould not resolve host: jroam;[color=#FF0000] Host not foundErrno malformedErrnocouldn't connect to host[/color]
自己已經解決了,還是要謝謝大家。
怎麼解決的呀?
我去,你解決了 也不丟個解決辦法!鄙視你!