2013-05-04 33 views
1

我使用這個代碼來獲得HTTP響應:在隱藏引用者之後是否可以使用get_headers?

$url = "http://example.com/"; 
$headers = get_headers($url); 
$header = substr($headers[0], 9, 3); 
echo = $header; 

偉大的工程,但我需要隱藏引薦,所以我用http://href.li/像這樣:

$url = "http://href.li/?http://example.com/"; 
$headers = get_headers($url); 
$header = substr($headers[0], 9, 3); 
echo = $header; 

這會導致200 OK HTTP無論最終頁面的狀態是什麼,狀態代碼都是如此。是否有可能從最終頁面獲得標題?還是有另一種方法來實現這一點,同時仍然使用引用者隱藏服務?

+0

'href。 li'網站不發送重定向。它發送一個包含''標籤和調用'window.location.replace()'的Javascript的網頁。我認爲它甚至不會嘗試連接到目標站點,因此無法報告成功或失敗。 – Barmar 2013-05-04 22:17:35

+0

你可以使用捲曲來隱藏引用者嗎? – Barmar 2013-05-04 22:20:19

+0

編輯標題,不熟悉curl – Xperplay 2013-05-04 22:20:43

回答

1

您不需要第三方服務來隱藏您的referer在這種請求中,您可以將其設置爲任何您需要的,但是,您不能使用get_headers函數執行此操作。你可以用file_get_contentsstream_context_create來完成。在你的情況,我想這將是這樣的:

$URL = 'http://example.com/'; 
$Context = stream_context_create(array(
    'http' => array(
     'method' => 'HEAD', 
     'header' => 'Referer: ' 
    ) 
)); 
file_get_contents($URL, false, $Context); 
$ResponseHeaders = $http_response_header; 

$header = substr($ResponseHeaders[0], 9, 3); 
echo $header; 

stream_context_create創建與請求任何選項,指定和file_get_contents不使用上下文的請求流上下文。之後,腳本檢查$http_response_header這是一種在HTTP請求到HTTP URL後填充的魔術變量,它僅在本地範圍內可用,即在調用發出HTTP請求的函數之後,而不是在之後執行的另一個函數。 $http_response_header的內容與get_header()函數的結果基本相同。

(您也可以使用GET在上面的例子,但如果你不需要響應主體,HEAD只是獲取頭,不身體。順便說一句,PHP的get_headers發出GET請求獲取包括整個響應然後有時接收服務器或腳本無法處理HEAD請求,或者執行一些操作,與GET請求相比,您應該嘗試一下,看看哪些方法適合您。)

+0

隱藏引用這種方式似乎工作,我得到正確的HTTP狀態代碼,但我收到以下PHP錯誤:警告:file_get_contents(http://403example.com/):未能打開流:HTTP請求失敗! HTTP/1.1 403 Forbidden – Xperplay 2013-05-04 22:53:36

+0

在這種情況下,用'GET'請求(只要將'HEAD'改爲'GET'),可能你所調用的服務器或腳本無法處理它。 – pilsetnieks 2013-05-04 23:00:52

+0

與GET相同的錯誤 – Xperplay 2013-05-04 23:07:07

相關問題