搜尋
首頁後端開發php教程PHP使用Curl實現模擬登入及抓取資料步驟詳解

這次帶給大家PHP使用Curl實現模擬登入及抓取資料步驟詳解,PHP使用Curl實現模擬登入及抓取資料的注意事項有哪些,以下就是實戰案例,一起來看一下。

使用PHP的Curl擴充庫可以模擬實作登錄,並抓取一些需要使用者帳號登入以後才能查看的資料。具體實現的流程如下(個人總結):

1. 首先需要對對應的登入頁面的html原始碼進行分析,獲得一些必要的資訊:

(1)登入頁面的位址;

(2)驗證碼的位址;

(3)登入表單需要提交的各個欄位的名稱和提交方式;

(4)登入表單提交的位址;

(5)另外要知道要抓取的資料所在的位址。

2. 取得cookie並儲存(針對使用cookie檔案的網站):

$login_url = 'http://www.xxxxx';  //登录页面地址
$cookie_file = dirname(FILE)."/pic.cookie";  //cookie文件存放位置(自定义)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch);

3. 取得驗證碼並儲存(針對使用驗證碼的網站):

$verify_url = "http://www.xxxx";   //验证码地址
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $verify_url);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$verify_img = curl_exec($ch);
curl_close($ch);
$fp = fopen("./verify/verifyCode.png",'w');  //把抓取到的图片文件写入本地图片文件保存
fwrite($fp, $verify_img);
fclose($fp);

說明:

由於不能實現驗證碼的識別,所以我這裡的做法是,把驗證碼圖片抓取下來存放到本地文件中,然後在自己項目中的html頁面中顯示,讓使用者去填寫,等使用者填寫完帳號、密碼和驗證碼,並點選提交按鈕後再去進行下一步的操作。

4. 模擬提交登入表單:

$ post_url = 'http://www.xxxx';   //登录表单提交地址
$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ post_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     //提交方式为post
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_exec($ch);
curl_close($ch);

5. 抓取資料:

$data_url = "http://www.xxxx";   //数据所在地址
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $data_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$data = curl_exec($ch);
curl_close($ch);

到目前為止,已經把資料所在地址的這個頁面都抓取下來存儲在字串變數$data中了。

要注意的是抓取下來的是一個網頁的html原始碼,也就是說這個字串中不僅包含了你想要的數據,還包含了許多的html標籤等你不要的東西。所以如果你想要從中提取出你需要的資料的話,你還要對存放資料的頁面的html程式碼進行分析,然後結合字串操作函數、正規匹配等方法從中提取出你想要的資料。

以上方法對使用http協議的一般網站是有效的。但如果你要模擬登入的是使用了https協議的網站的話還需要添加以下一些處理:

1. 跳過https驗證:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

2. 使用用戶代理:

$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);

注意:如果不加入這些處理的話模擬登入時是不能成功的。

使用以上程式模擬登入網站一般都是能成功的,但實際上還是需要針對模擬登入的網站具體情況具體考慮。例如:有些網站編碼不同,所以你抓取下來的頁面是亂碼的,這時就要進行一下編碼轉換,如:$data = iconv("gb2312", "utf-8",$data) ;,把gbk編碼轉換為utf8編碼。還有一些對安全性要求比較高的網站,例如網銀,會把驗證碼放在一個內聯框架中,這時你就需要先抓取到內聯框架的頁面然後在從中提取出驗證碼的位址,再去抓取驗證碼。還有一些網站(例如網路銀)是在js程式碼中去提交表單的,提交表單之前還會去做一些處理,例如加密等,所以如果你是直接提交的話也是不能登入成功的,你必須要去做類似的處理後再提交,但是這種情況如果你能知道js程式碼中進行的具體操作,比如加密的話,加密演算法是怎樣的,你就可以進行跟它一樣的處理,然後再去提交數據,這樣也是能成功的。但是,關鍵的地方來了,如果你根本不知道它進行的是什麼操作,例如它進行了加密,但是你不知道加密的具體演算法,那麼你就無法進行相同的操作,也就不能成功地模擬登入了。這方面典型的案例就是網銀,它在js程式碼中提交表單之前使用網銀控制項對使用者提交的密碼和驗證碼進行了一些處理,但是我們根本不知道它進行的是什麼操作,所以無法模擬。所以如果你以為你看了本文之後就能模擬登入網路銀行的話那麼你就太天真了,人家銀行的網站能那麼容易被你模擬登入嗎?當然,如果你能破解網路銀控制的話,那就另當別論了。話說回來,為什麼我的感受如此深刻,因為我就遇到這個難題了,不說了,說多了都是淚啊。 。 。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

PHP MySQL處理高並發加鎖交易步驟詳解

實作購物車結算方法總結

以上是PHP使用Curl實現模擬登入及抓取資料步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
解釋負載平衡如何影響會話管理以及如何解決。解釋負載平衡如何影響會話管理以及如何解決。Apr 29, 2025 am 12:42 AM

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

說明會話鎖定的概念。說明會話鎖定的概念。Apr 29, 2025 am 12:39 AM

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

有其他PHP會議的選擇嗎?有其他PHP會議的選擇嗎?Apr 29, 2025 am 12:36 AM

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

在PHP的上下文中定義'會話劫持”一詞。在PHP的上下文中定義'會話劫持”一詞。Apr 29, 2025 am 12:33 AM

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

PHP的完整形式是什麼?PHP的完整形式是什麼?Apr 28, 2025 pm 04:58 PM

文章討論了PHP,詳細介紹了其完整形式,在We​​b開發中的主要用途,與Python和Java的比較以及對初學者的學習便利性。

PHP如何處理形式數據?PHP如何處理形式數據?Apr 28, 2025 pm 04:57 PM

PHP使用$ \ _ post和$ \ _獲取超級全局的php處理數據,並通過驗證,消毒和安全數據庫交互確保安全性。

PHP和ASP.NET有什麼區別?PHP和ASP.NET有什麼區別?Apr 28, 2025 pm 04:56 PM

本文比較了PHP和ASP.NET,重點是它們對大規模Web應用程序,性能差異和安全功能的適用性。兩者對於大型項目都是可行的,但是PHP是開源和無關的,而ASP.NET,

PHP是對病例敏感的語言嗎?PHP是對病例敏感的語言嗎?Apr 28, 2025 pm 04:55 PM

PHP的情況敏感性各不相同:功能不敏感,而變量和類是敏感的。最佳實踐包括一致的命名和使用對案例不敏感的功能進行比較。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)