首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 使用 file_get_contents 模擬瀏覽器 User-Agent 抓取網頁資料

     編輯:PHP 相關知識

許多網站會檢查 HTTP 請求的 User-Agent 標頭,若發現非主流瀏覽器特徵(如 PHP 預設的 file_get_contents 不發送 UA),便會拒絕回傳內容或導向驗證頁。本文說明如何在 PHP 中偽造 User-Agent,讓 file_get_contents 或串流操作能順利取得目標頁面。

什麼是 User-Agent?

User-Agent(UA)是 HTTP 請求標頭中的一個字串,包含作業系統、CPU 架構、瀏覽器類型與版本、渲染引擎、語言偏好等資訊。伺服器依此判斷客戶端身分,決定回傳桌面版、行動版或封鎖請求。

方法一:直接修改 php.ini 設定(全域生效)

ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 4399Box.560; .NET4.0C; .NET4.0E)');

此行程式碼需在呼叫 file_get_contents 之前執行。範例模擬 IE8 環境,實務上可替換為 Chrome、Firefox、行動裝置等常見 UA 字串。

方法二:使用串流上下文精細控制請求標頭

若需同時設定 Host、Accept-Language、Accept 等標頭,建議使用 stream_context_create:

<?php
$opts = array(
    'http' => array(
        'method' => "GET",
        'header' => "Host: zh.wikipedia.org\r\n" .
                    "Accept-language: zh-cn\r\n" .
                    "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 4399Box.560; .NET4.0C; .NET4.0E)\r\n" .
                    "Accept: */*\r\n"
    )
);

$context = stream_context_create($opts);
$content = file_get_contents('https://zh.wikipedia.org/', false, $context);
echo $content;
?>

注意事項:

  • 標頭之間必須以 \r\n 分隔,單純換行符可能導致請求失效。
  • 部分網站檢查 Referer、Cookie 甚至 Accept-Encoding,視情況補充。
  • 若目標頁面為 HTTPS,確認 PHP 已啟用 openssl 擴充功能。

常見 User-Agent 字串參考

環境User-Agent 範例
Chrome 120 (Windows 10)Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Firefox 121 (macOS)Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0
iPhone Safari (iOS 17)Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1
GooglebotMozilla/5.0 (compatible; Googlebot/2.1; +https://www.google.com/bot.html)

進階:搭配 cURL 更靈活

若需處理 Cookie、重導向、POST 資料、Proxy 等複雜情境,建議改用 cURL 擴充功能:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$html = curl_exec($ch);
curl_close($ch);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved