溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP CURL獲取cookies模擬登錄的方法

發(fā)布時(shí)間:2020-06-11 20:46:12 來(lái)源:網(wǎng)絡(luò) 閱讀:968 作者:gutaotao1989 欄目:web開(kāi)發(fā)

要提取google搜索的部分?jǐn)?shù)據(jù),發(fā)現(xiàn)google對(duì)于軟件抓取它的數(shù)據(jù)屏蔽的厲害,以前偽造下 USER-AGENT 就可以抓數(shù)據(jù),但是現(xiàn)在卻不行了。利用抓包數(shù)據(jù)發(fā)現(xiàn),Google 判斷了 cookies,當(dāng)你沒(méi)有cookies的時(shí)候,直接返回 302 跳轉(zhuǎn),而且是連續(xù)幾十個(gè)302跳轉(zhuǎn),根本抓不了數(shù)據(jù)。

因此,在發(fā)送搜索命令時(shí),需要先提取 cookies 并保存,然后利用保存下來(lái)的這個(gè)cookies再次發(fā)送搜索命令即可正常抓數(shù)據(jù)了。這其實(shí)和論壇的模擬登錄一個(gè)道理,先POST登錄,獲取cookies并保存,然后利用這個(gè)cookies訪問(wèn)就可以了。

PHP 代碼如下:


$login_url = 'XXX';  

   

 $post_fields['email'] = 'XXXX';  

 $post_fields['password'] = 'XXXX';  

 $post_fields['origURL'] = 'XXX';  

 $post_fields['domain'] = 'xxx.com';  

 //cookie文件存放在網(wǎng)站根目錄的temp文件夾下  

 $cookie_file = tempnam('./temp','cookie');  

   

 $ch = curl_init($login_url);  

 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');  

 curl_setopt($ch, CURLOPT_HEADER, 0);  

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  

 curl_setopt($ch, CURLOPT_MAXREDIRS, 1);  

 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  

 curl_setopt($ch, CURLOPT_AUTOREFERER, 1);  

 curl_setopt($ch, CURLOPT_POST, 1);  

 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);  

 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  

 curl_exec($ch);  

 curl_close($ch);  

   

 //帶上cookie文件,訪問(wèn)需要訪問(wèn)的頁(yè)面  

 $send_url='xxx.com';  

 $ch = curl_init($send_url);  

 curl_setopt($ch, CURLOPT_HEADER, 0);  

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  

 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);  

 $contents = curl_exec($ch);  

 curl_close($ch);  

   

 //清理cookie文件  

unlink($cookie_file);  

   

 //輸出網(wǎng)頁(yè)內(nèi)容  

print_r($contents);


在temp文件夾下保存一個(gè)cookie前綴的臨時(shí)文件,例如:coo3A98.tmp文件

打開(kāi)這個(gè)文件得到如下代碼:

PHP CURL獲取cookies模擬登錄的方法


要使用php來(lái)格式化該文件,使用以下代碼就能實(shí)現(xiàn)

<?php   

 $cookie_folder = dirname(__FILE__)."/temp";  

 $lines = file($cookie_folder.'/coo3A98.tmp');  

   

 $trows = '';  

   

 foreach($lines as $line) {  

     if($line[0] != '#' && substr_count($line, "\t") == 6) {  

         $tokens = explode("\t", $line);  

         $tokens = array_map('trim', $tokens);  

         $tokens[4] = date('Y-m-d h:i:s', $tokens[4]);  

         $trows .= '<tr><td>' . implode('</td><td>', $tokens) . '</td></tr>' . PHP_EOL;  

     }  

 }  

 echo '<table>'.PHP_EOL.'<tbody>'.PHP_EOL.$trows.'</tbody>'.PHP_EOL.'</table>';  

 ?>


運(yùn)行之后就如下圖所示,已經(jīng)被寫(xiě)入到table當(dāng)中

PHP CURL獲取cookies模擬登錄的方法

大功告成,如果只讀取其中字段可自行修改即可。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI