PHP采集https網站用于獲取數據已經成為現在web應用開發中的一個非常常見的需求。比如我們需要采集某個電商網站的商品列表、價格、評論等信息,這些數據通過網站爬蟲工具獲取的話,更容易獲取到手,尤其是一些需要登錄的網站信息,通過PHP編寫,就更加方便。今天我們就來介紹一下PHP采集https的方法。
使用PHP采集https的方法可以分為三步驟。
第一步,獲取目標網站的cookies。因為采集https的網站往往需要登錄,所以需要獲取到登錄成功后得到的cookies。我們可以通過瀏覽器開發者工具中的Network標簽頁來獲取cookies。當我們登錄成功后,可以在Network中找到對應登錄的請求,在Headers中找到cookie項,復制該項的值即為目標網站cookies的值。
<?php $login_url = 'https://example.com/login'; $username = 'username'; $password = 'password'; $cookies = '__cfduid=d682476642e1f5f44d7651987e23c114c1569007360; laravel_session=eyJpdiI6ImRBVGx1Uks4Umcyb0w4anBWWkJmZVE9PSIsInZhbHVlIjoiQnNxRlFEZGVpQkc5TXdnXC9VTk9TMFlKWW5WVzJ6VDkzdDJZWTdMZUQ4d29FcDE1VHc0OFBvMm8waDVGTG9zRmtsVTExU3VEZWFGWkthaFZBT0E9PSIsIm1hYyI6IjA0N2JjYWNjMzE3NmJkZWI3ZTVkZjZlOWI2NzA0NGMxOGE0MjNiOWIzOTIzMzlhYmExZjkzNzNkYmIxOWFiMTEifQ%3D%3D';
第二步,設置請求頭信息。在http請求中,設置請求頭信息是一項非常重要的工作,因為對于不同的網站而言,請求頭信息的設置方法都是不同的。對于不同的瀏覽器而言,請求頭信息也存在著差異。如果我們不設置請求頭信息,可能會導致目標網站無法識別我們的請求,從而不能獲取到想要的內容。
$headers = array( 'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Host:example.com', 'Referer:https://example.com/', 'Origin:https://example.com/', 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' );
第三步,發送https請求。請求之后,我們需要獲取到目標網站的響應信息,PHP中可以用fopen()、curl等方法獲取。但是對于采集https數據而言,因為需要進行SSL驗證,所以最好使用curl。
$post_data = array( 'name' =>$username, 'password' =>$password ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $login_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_COOKIE, $cookies); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//取消ssl驗證 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//取消ssl驗證 $result = curl_exec($ch); curl_close($ch); echo $result;
至此,我們通過三步驟簡單的實現了通過PHP采集https數據的方法,總結來說就是獲取cookies、設置請求頭信息、發送https請求。同時,在進行https數據采集的時候還必須注意SSL驗證。當然,采集https數據的時候,需要注意合法性問題,不得進行侵犯他人隱私、侵害他人權益等非法活動。