本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在請求A的時候就會被直接跳轉到B,這就是301重定向。在某些情況下,我們需要獲取重定向後的地址,可能是為了獲取正確的url或者為了數據分析等目的。接下來將從多個方面為大家詳細介紹。
一、使用cURL獲取301跳轉後的地址
PHP的cURL庫是一個非常強大的庫,用來處理各種網絡請求問題。我們可以通過cURL獲取301跳轉後的地址。使用cURL獲取301地址的過程比較簡單,具體操作步驟如下:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.google.com'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $redirect_url = curl_exec($ch); echo "Redirect URL: ".$redirect_url;
執行上述代碼,我們就可以獲取到301跳轉後的地址。首先使用curl_init()初始化一個cURL句柄,然後使用curl_setopt()為句柄設置選項。我們需要設置CURLOPT_FOLLOWLOCATION為true,這樣cURL就可以自動跟隨所有重定向。最後使用curl_exec()執行請求,將返回重定向後的地址。
二、使用PHP的header函數獲取301跳轉後的地址
PHP的header函數是用來發送HTTP頭部信息的,它也可以用來獲取301跳轉後的地址。header函數的第二個參數,如果設置為true,就可以獲取HTTP頭部信息。具體操作步驟如下:
$url = 'http://www.google.com'; $headers = get_headers($url, 1); if (strpos($headers[0], '301') !== false) { $redirect_url = $headers['Location']; echo "Redirect URL: ".$redirect_url; }
首先我們使用get_headers()函數獲取HTTP頭部信息,然後如果首行包含“301”字符串,就認為有重定向,此時我們可以使用$headers[‘Location’]獲取重定向後的地址。
三、使用模擬瀏覽器的方式獲取301跳轉後的地址
有些網站會檢查請求來自瀏覽器還是爬蟲,如果檢測到是爬蟲就會直接返回404錯誤,即使請求的地址是正確的。我們可以使用PHP的模擬瀏覽器方式來獲取301跳轉後的地址。使用模擬瀏覽器的方式比較靈活,可以自由設置請求頭、cookie等信息。具體操作步驟如下:
$url = 'http://www.google.com'; $useragent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $redirect_url = curl_exec($ch); echo "Redirect URL: ".$redirect_url;
首先我們設置了一個自定義的User-agent,然後使用cURL訪問目標網站。curl_setopt()函數和上述相同,我們需要設置CURLOPT_RETURNTRANSFER為true,這樣curl_exec()函數就不會直接輸出內容。最後使用curl_exec()函數將返回重定向後的地址。
四、使用重定向事件來獲取301跳轉後的地址
如果網站使用了JavaScript跳轉,那麼使用上述方式就無法獲取跳轉後的地址。這時我們可以使用JavaScript的重定向事件來獲取跳轉後的地址。具體操作步驟如下:
$url = 'http://www.google.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); preg_match_all('/
原創文章,作者:WIAMR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/374255.html