我試圖提取URL請求的響應標頭。當我使用螢火分析的URL請求的響應輸出,它返回:Python urllib2響應標頭
Content-Type text/html
然而,當我使用Python代碼:
urllib2.urlopen(URL).info()
所得輸出返回:
Content-Type: video/x-flv
我是新來的python,並一般的網絡編程;任何有用的見解,非常感謝。另外,如果需要更多信息,請告訴我。
預先感謝閱讀這篇文章
我試圖提取URL請求的響應標頭。當我使用螢火分析的URL請求的響應輸出,它返回:Python urllib2響應標頭
Content-Type text/html
然而,當我使用Python代碼:
urllib2.urlopen(URL).info()
所得輸出返回:
Content-Type: video/x-flv
我是新來的python,並一般的網絡編程;任何有用的見解,非常感謝。另外,如果需要更多信息,請告訴我。
預先感謝閱讀這篇文章
這種奇特的差異可能是由不同的頭文件(即接受那種可能的)來解釋由兩個請求發送 - 您可以檢查...?或者,如果Javascript在Firefox中運行(我假設你在運行螢火蟲時使用的是) - 因爲它絕對不在Python中運行 - 「所有投注都關閉」,就像他們說的那樣;-) 。
嗯,我不太確定如何有兩個不同的標題,也是我將如何能夠區分兩者。我很確定JavaScript運行在Firefox中......那麼我需要在Python中執行什麼操作? – looter 2009-10-31 06:26:47
@looter,在Python中沒有直接的方法來執行Javascript - 如果JavaScript在確定頁面的最終內容方面起着至關重要的作用,那麼最好的方法就是自動化真正的瀏覽器。通過SeleniumRC。 – 2009-10-31 06:39:35
我不確定Javascript是否正在處理請求,因爲當我在螢火蟲中使用網絡監控時,響應標題也可在HTML視圖中查看。就像我在文章中提到的那樣,我對python和web編程/腳本編程真的很陌生,所以這些都在我頭上,我不確定我是否足夠描述。感謝您一直以來的幫助。 – looter 2009-10-31 06:45:34
內容類型text/html
真的,這樣,沒有冒號?
如果是這樣,那麼可以解釋它:它是一個無效的頭,所以它被忽略,所以urllib通過查看文件名來猜測內容類型。如果URL最後有'.flv',則會猜測該類型應爲video/x-flv
。
請記住,根據請求的不同,Web服務器可以爲相同的URL返回不同的結果。例如,內容類型協商:請求者可以指定它將接受的內容類型列表,服務器可以返回不同的結果以適應不同的需求。例如,您可能正在爲您的某個請求獲取錯誤頁面,例如,因爲它的格式不正確,或者您沒有設置用於正確驗證您的Cookie設置等。請查看響應本身以查看內容你越來越。
嘗試按Firefox提出請求。你可以看到在Firebug請求頭,所以將它們添加到您的請求對象:
import urllib2
request = urllib2.Request('http://your.tld/...')
request.add_header('User-Agent', 'some fake agent string')
request.add_header('Referer', 'fake referrer')
...
response = urllib2.urlopen(request)
# check content type:
print response.info().getheader('Content-Type')
還有HTTPCookieProcessor它可以做的更好,但我不認爲你需要它在大多數情況下。看看Python的文檔:
根據http://docs.python.org/library/urllib2.html只有get_header()
方法一無所知getheader
。
問,因爲您的代碼工作正常
response.info().getheader('Set cookie')
但一旦我執行
response.info().get_header('Set cookie')
我得到:
Traceback (most recent call last):
File "baza.py", line 11, in <module>
cookie = response.info().get_header('Set-Cookie')
AttributeError: HTTPMessage instance has no attribute 'get_header'
編輯: 此外
response.headers.get('Set-Cookie')
正常工作,以及,而不是男人tioned在urlib2 DOC ....
get_header()用於urllib2.Request類。響應類使用getheader()來代替,這是一個不幸的錯配。 – 2012-12-27 20:56:08
進口urllib.request裏
fhand = urllib.request.urlopen( 'http://data.pr4e.org/intro-short.txt')
打印(fhand.info())
歡迎來到SO。請閱讀此[如何回答](http://stackoverflow.com/help/how-to-answer)以提供高質量的答案。 – thewaywewere 2017-04-26 05:17:40
這似乎是一個副本http://stackoverflow.com/questions/843392/python-get-http-headers-from-urllib-call – 2012-04-26 20:15:46