我使用curl來獲取網頁,我需要檢測響應是否爲gzip。PHP - 檢測gzip服務器響應
如果在響應頭文件中指定了Content-Encoding,但是一些服務器返回「Transfer-Encoding」:「Chunked」並且不包含Content-Encoding頭,
有沒有辦法檢測gzip或獲取原始(編碼)的服務器響應?
我試着看curl_getinfo,但content_encoding沒有指定。
謝謝。
我使用curl來獲取網頁,我需要檢測響應是否爲gzip。PHP - 檢測gzip服務器響應
如果在響應頭文件中指定了Content-Encoding,但是一些服務器返回「Transfer-Encoding」:「Chunked」並且不包含Content-Encoding頭,
有沒有辦法檢測gzip或獲取原始(編碼)的服務器響應?
我試着看curl_getinfo,但content_encoding沒有指定。
謝謝。
您可以檢查迴應是否以gzip幻數開頭,具體爲1f 8b
。
有什麼方法來檢測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 *來設置它。
您可以發出獨立的HEAD請求:
CURLOPT_HEADER => true
CURLOPT_NOBODY => true
或請求頭作爲前綴,以您的原始請求:
CURLOPT_HEADER => true
但是,如果你只是想獲得的(解碼)HTML,您可以使用:
CURLOPT_ENCODING => ''
而CURL會自動與服務器協商解碼爲你而設。