PHP中提供了許多強大的函數用於開發,其中get_headers是一種非常有用的函數。該函數會返回指定URL所引用的所有HTTP頭信息,包括響應代碼、響應消息、日期、伺服器信息和其他頭信息。在本文中,我們將從多個方面對get_headers進行詳細闡述。
一、獲取遠程文件的HTTP頭信息
get_headers最常用的功能之一就是獲取遠程文件的HTTP頭信息。通過該函數,可以獲取到伺服器返回的各種信息,如響應代碼、響應消息、日期、伺服器信息、資源類型、資源大小、緩存時間等等。例如,我們可以編寫下面的代碼來獲取指定URL的HTTP頭信息:
$url = 'https://www.example.com/'; $headers = get_headers($url); foreach ($headers as $header) { echo $header . '\n'; }
上面的代碼首先指定了要獲取HTTP頭信息的URL,然後調用get_headers函數獲取到$header數組。我們使用foreach循環遍曆數組,輸出每個頭信息。這樣我們就可以在命令行或瀏覽器中查看響應的HTTP頭信息。
二、判斷URL是否有效
除了獲取HTTP頭信息,get_headers函數還常用於判斷指定URL是否有效或是否可以正常訪問。例如,我們可以編寫下面的代碼來判斷一個URL是否可以正常訪問:
$url = 'https://www.example.com/'; $headers = @get_headers($url); if ($headers && strpos($headers[0], '200')){ echo 'URL is valid.'; } else { echo 'URL is not valid.'; }
上面的代碼首先指定要判斷的URL,然後使用@符號屏蔽掉get_headers函數可能產生的錯誤信息,將返回結果存儲在$headers數組中。我們通過判斷數組中第一個元素是否包含字元’200’,從而判斷URL是否有效。
三、獲取指定URL的重定向信息
get_headers函數也可以用於獲取指定URL的重定向信息。例如,我們可以編寫下面的代碼來獲取百度搜索的重定向信息。
$url = 'https://www.baidu.com/s?wd=example'; $headers = get_headers($url,1); if (isset($headers['Location'])) { echo 'Redirect URL: ' . $headers['Location']; } else { echo 'No redirect URL.'; }
上面的代碼首先指定要獲取重定向信息的URL,然後將第二個參數設置為1以獲取所有HTTP頭信息。我們通過判斷$headers數組中是否存在Location鍵來判斷是否存在重定向信息,並輸出重定向的URL。
四、發送自定義HTTP頭信息
get_headers函數除了從伺服器獲取HTTP頭信息外,還可以向伺服器發送自定義的HTTP頭信息。例如,我們可以編寫下面的代碼來向伺服器發送自定義的HTTP頭信息,以便在header中含有User-Agent欄位,請注意本例中的HTML實體化:
$opts = array( 'http' => array( 'method'=>"GET", 'header'=>"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)\r\n" ) ); $context = stream_context_create($opts); $url = 'https://www.example.com/'; $headers = get_headers($url,false, $context); foreach ($headers as $header) { echo htmlentities($header) . '<br />'; }
上面的代碼通過$opts數組定義了要發送的HTTP頭信息,其中包含User-Agent信息。我們通過stream_context_create函數創建一個上下文,使用get_headers函數並將上下文傳遞給它。最後,我們在循環中輸出伺服器返回的HTTP頭信息,注意使用htmlentities函數進行HTML實體化,以避免在瀏覽器中解析出現問題。
五、使用get_headers獲取網站內容
在一些情況下,我們需要獲取目標網站特定位置的HTML內容,get_headers是一種可以幫助我們完成這個任務的簡單方式。例如,我們可以編寫下面的代碼來提取百度首頁的頂部標籤信息:
$url = 'https://www.baidu.com/'; $headers = get_headers($url, 1); $data = file_get_contents($url, false, stream_context_create(array( 'http' => array( 'method' => 'GET', 'header' => "User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36\r\n" ) ))); if (isset($headers['Content-Type']) && strpos($headers['Content-Type'], 'text/html') !== false) { preg_match('/^\<.+?\>/is', $data, $match); echo 'HTML: ' . htmlentities($match[0]); } else { echo 'No HTML content.'; }
上面的代碼首先指定要獲取HTML內容的URL,並使用get_headers函數獲取HTTP頭信息,將結果存儲在$headers數組中。接下來,我們使用file_get_contents來獲取頁面內容,並在此期間使用stream_context_create發送自定義的HTTP頭消息。最後,我們使用preg_match函數匹配HTML內容,並輸出匹配的第一個標籤。需要注意的是,我們在輸出HTML標籤之前使用htmlentities函數進行了HTML實體化。
六、小結
get_headers是一種非常實用的PHP函數,可以用於多種不同的目的,包括獲取遠程文件的HTTP頭信息、判斷URL是否有效、獲取重定向信息和發送自定義HTTP頭信息。通過本文的介紹,我們相信您已經能夠在您的項目中合理運用get_headers函數了。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/160067.html