本文將介紹如何使用php的cookie模擬登陸,實(shí)現(xiàn)自動(dòng)登陸的效果。當(dāng)我們需要在php代碼中訪問(wèn)需要登陸后才能訪問(wèn)的頁(yè)面時(shí),我們可以使用cookie模擬登陸,繞過(guò)登陸的驗(yàn)證,從而直接訪問(wèn)需要登陸后才能訪問(wèn)的頁(yè)面。
下面以一個(gè)簡(jiǎn)單的網(wǎng)站為例,演示如何使用cookie模擬登陸:
// 登陸請(qǐng)求的url地址 $url = "http://www.example.com/login.php"; // 登陸請(qǐng)求的參數(shù) $data = array( 'username' =>'example_user', 'password' =>'example_password' ); // 通過(guò)curl模擬post請(qǐng)求,向登錄請(qǐng)求的url地址發(fā)送請(qǐng)求,提交參數(shù) $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt'); // 將cookie保存到文件中 $result = curl_exec($curl); curl_close($curl); // 訪問(wèn)需要登陸后才能訪問(wèn)的頁(yè)面 $url2 = "http://www.example.com/protected_page.php"; $curl2 = curl_init(); curl_setopt($curl2, CURLOPT_URL, $url2); curl_setopt($curl2, CURLOPT_COOKIEFILE, 'cookie.txt'); // 讀取已保存的cookie curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1); $result2 = curl_exec($curl2); curl_close($curl2); echo $result2;
在上面的代碼中,我們使用了curl庫(kù)模擬post請(qǐng)求,向登陸請(qǐng)求的url地址提交了用戶名和密碼,同時(shí)也指定了保存cookie的jar文件。在訪問(wèn)需要登陸后才能訪問(wèn)的頁(yè)面時(shí),我們使用了保存在cookie.txt文件中的cookie,從而繞過(guò)登陸的驗(yàn)證,直接訪問(wèn)了需要登陸后才能訪問(wèn)的頁(yè)面。
除了使用curl庫(kù)之外,我們還可以使用php提供的http請(qǐng)求庫(kù)guzzlehttp/guzzle來(lái)模擬登陸。下面是使用guzzle庫(kù)來(lái)實(shí)現(xiàn)自動(dòng)登錄的代碼:
// 創(chuàng)建一個(gè)http客戶端 $client = new GuzzleHttp\Client(); // 訪問(wèn)登陸頁(yè)面,獲取csrf_token的值 $url = 'http://www.example.com/login'; $res = $client->request('GET', $url); $body = $res->getBody()->getContents(); preg_match('/csrf_token\" value=\"([^\"]+)/', $body, $matches); $csrf_token = $matches[1]; // 發(fā)送post請(qǐng)求,提交登陸數(shù)據(jù) $url = 'http://www.example.com/login'; $res = $client->request('POST', $url, [ 'form_params' =>[ 'username' =>'example_user', 'password' =>'example_password', 'csrf_token' =>$csrf_token ] ]); // 訪問(wèn)需要登陸后才能訪問(wèn)的頁(yè)面 $url = 'http://www.example.com/protected_page.php'; $res = $client->request('GET', $url); echo $res->getBody()->getContents();
在上面的代碼中,我們使用guzzle庫(kù)模擬了登陸請(qǐng)求,并且通過(guò)正則表達(dá)式匹配了登陸頁(yè)面中的csrf_token的值,提交了登陸需要的參數(shù)。在訪問(wèn)需要登陸后才能訪問(wèn)的頁(yè)面時(shí),我們直接訪問(wèn)了需要登陸后才能訪問(wèn)的頁(yè)面。
通過(guò)上面的兩個(gè)例子,我們可以看出使用cookie模擬登陸的流程基本相同。首先模擬登陸請(qǐng)求,提交用戶名和密碼,并且保存登陸后的cookie,然后即可使用保存的cookie來(lái)訪問(wèn)需要登陸才能訪問(wèn)的頁(yè)面。
總而言之,使用php的cookie模擬登陸是一種簡(jiǎn)單、方便的自動(dòng)登錄方式,可以大大提高訪問(wèn)需要登陸后才能訪問(wèn)的頁(yè)面的效率和便利性。所以我們可以在實(shí)際開(kāi)發(fā)中靈活運(yùn)用,提高工作效率。