Snoopy 是一個純 PHP 實作的 HTTP 客戶端類,無需安裝任何擴充套件(甚至不需要 cURL),支援 PHP 4 以上版本。它能模擬瀏覽器行為,是伺服器不支援 cURL 時的最佳替代方案。
fetch)、純文字(fetchtext)、連結(fetchlinks)、表單(fetchform)submit、submittext、submitlinks)| 方法 | 說明 |
|---|---|
fetch($url) | 抓取完整頁面內容,結果存 $this->results |
fetchtext($url) | 抓取並移除 HTML 標籤,只回傳文字 |
fetchlinks($url) | 抓取所有連結,預設自動補全為絕對 URL |
fetchform($url) | 抓取表單內容 |
submit($url, $formvars) | POST 提交表單,$formvars 為欄位陣列 |
submittext($url, $formvars) | 提交並只回傳文字內容 |
submitlinks($url, $formvars) | 提交並只回傳連結 |
$snoopy = new Snoopy;
$snoopy->proxy_host = "https://proxy.example.com";
$snoopy->proxy_port = "8080";
$snoopy->agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1)";
$snoopy->referer = "https://www.example.com";
$snoopy->cookies["SessionID"] = "abc123";
$snoopy->rawheaders["X-Forwarded-For"] = "1.2.3.4"; // 偽造 IP(僅影響 HTTP Header)
$snoopy->maxredirs = 3; // 最大重定向次數
$snoopy->expandlinks = true; // 自動補全相對連結
include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy->agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
$snoopy->referer = "https://target-site.com/login";
$snoopy->cookies["PHPSESSID"] = "known_session_id"; // 繞過驗證碼技巧:同 Session 共用驗證碼
$formvars = ["username" => "admin", "pwd" => "password"];
if ($snoopy->submit("https://target-site.com/login", $formvars)) {
echo htmlspecialchars($snoopy->results);
} else {
echo "Error: " . $snoopy->error;
}
啟用 $snoopy->maxframes = 5 後,$snoopy->results 會回傳陣列,每個元素對應一個框架的內容。
X-Forwarded-For 只能欺騙靠 Header 取 IP 的程式,$_SERVER['REMOTE_ADDR'] 無法偽造