模擬登入是爬蟲、API 整合、自動化測試常見需求。本文對比兩種經典 PHP 方案:Snoopy 庫(輕量級瀏覽器模擬)與 cURL 底層控制,並以人人網登入為例說明關鍵步驟。
Snoopy 封裝了表單提交、Cookie 管理、Header 偽裝等功能,語法簡潔,適合快速開發。
<?php
require 'Snoopy.class.php';
$snoopy = new Snoopy();
$snoopy->referer = 'https://www.example.com/';
$snoopy->agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36';
$loginUrl = 'https://www.example.com/login.php';
$postData = [
'email' => 'your_account',
'password' => 'your_password'
];
$snoopy->submit($loginUrl, $postData);
// 登入後攜帶 Cookie 訪問受保護頁面
$snoopy->fetch('https://www.example.com/profile.php');
echo $snoopy->results;
?>
cURL 直接操作 HTTP 協議,支援完整 Cookie 生命週期管理、多執行緒、代理、SSL 驗證等進階功能。
<?php
$cookieFile = sys_get_temp_dir() . '/cookie_' . md5('example') . '.txt';
$loginUrl = 'https://www.example.com/login.php';
$postData = http_build_query([
'email' => 'your_account',
'password' => 'your_password'
]);
// 步驟 1:登入並保存 Cookie
$ch = curl_init($loginUrl);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_COOKIEJAR => $cookieFile, // 保存 Cookie
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false, // 測試環境可關閉驗證
CURLOPT_USERAGENT => 'Mozilla/5.0...'
]);
curl_exec($ch);
curl_close($ch);
// 步驟 2:攜帶 Cookie 訪問會員頁
$ch = curl_init('https://www.example.com/profile.php');
curl_setopt_array($ch, [
CURLOPT_COOKIEFILE => $cookieFile, // 讀取 Cookie
CURLOPT_RETURNTRANSFER => true,
]);
$content = curl_exec($ch);
curl_close($ch);
echo $content;
?>
| 特性 | Snoopy | cURL |
|---|---|---|
| 學習曲線 | 低 | 中 |
| 效能 | 一般 | 高 |
| 功能豐富度 | 基本 | 完整 |
| 維護狀態 | 停止更新 | PHP 核心擴展,持續更新 |
| 適用場景 | 簡單快速腳本 | 生產級爬蟲、API 整合 |
CURLOPT_COOKIEJAR/FILE、CURLOPT_FOLLOWLOCATION、CURLOPT_SSL_VERIFYPEER)。CURLOPT_SSL_VERIFYPEER。robots.txt 與服務條款,合法合規爬取。