萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 模擬登入實作:Snoopy 與 cURL 兩種方案對比

前言

模擬登入是爬蟲、API 整合、自動化測試常見需求。本文對比兩種經典 PHP 方案:Snoopy 庫(輕量級瀏覽器模擬)與 cURL 底層控制,並以人人網登入為例說明關鍵步驟。

方案一:Snoopy 庫

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 手動控制(更靈活、效能更好)

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;
?>

關鍵差異對比

特性SnoopycURL
學習曲線低中
效能一般高
功能豐富度基本完整
維護狀態停止更新PHP 核心擴展,持續更新
適用場景簡單快速腳本生產級爬蟲、API 整合

最佳實踐建議

  1. 優先使用 cURL,掌握核心選項(CURLOPT_COOKIEJAR/FILE、CURLOPT_FOLLOWLOCATION、CURLOPT_SSL_VERIFYPEER)。
  2. 生產環境務必驗證 SSL 憑證,勿長期關閉 CURLOPT_SSL_VERIFYPEER。
  3. 加入隨機延遲、User-Agent 池、IP 代理池,降低被封風險。
  4. 遵守目標網站 robots.txt 與服務條款,合法合規爬取。
copyright © 萬盛學電腦網 all rights reserved