2011-10-12 60 views
1

我使用curl來獲取網頁,我需要檢測響應是否爲gzip。PHP - 檢測gzip服務器響應

如果在響應頭文件中指定了Content-Encoding,但是一些服務器返回「Transfer-Encoding」:「Chunked」並且不包含Content-Encoding頭,

有沒有辦法檢測gzip或獲取原始(編碼)的服務器響應?

我試着看curl_getinfo,但content_encoding沒有指定。

謝謝。

回答

2

您可以檢查迴應是否以gzip幻數開頭,具體爲1f 8b

1

有什麼方法來檢測gzip的

是。您可以使用cURL標題功能。例如,您可以定義一個處理標題響應的函數。使用curl_setopt()CURLOPT_HEADERFUNCTION選項。或者用CURLOPT_WRITEHEADER選項將其寫入文件(您使用fopen()創建)。

可能有更多選項可供您使用。看看curl_setopt()手冊中的可能性。您正在查找的標題名稱爲:內容編碼

如果你在一個文件中輸出,你也可以使用PHP finfo及其一些predefined constants。或者mime_content_type()DEPRECATED!)if finfo is not you to you。

或獲取原始(編碼)的服務器響應?

是的。您可以指定accept-encoding標頭。你正在尋找的價值是身份。 所以,你可以發送:

Accept-Encoding: identity 

可有看向HTTP/1.1 RFC 爲了得到一個未編碼/未壓縮輸出(例如直接記錄到一個文件)。 爲此使用CURLOPT_ENCODING。你可以用* curl_setopt *來設置它。

1

您可以發出獨立的HEAD請求:

CURLOPT_HEADER => true 
CURLOPT_NOBODY => true 

或請求頭作爲前綴,以您的原始請求:

CURLOPT_HEADER => true 

但是,如果你只是想獲得的(解碼)HTML,您可以使用:

CURLOPT_ENCODING => '' 

而CURL會自動與服務器協商解碼爲你而設。