URLリクエストのレスポンスヘッダーを抽出しようとしています。 firebugを使用してURL要求の応答出力を分析すると、次のように返されます。
Content-Type text/html
ただし、pythonコードを使用する場合:
urllib2.urlopen(URL).info()
結果の出力は以下を返します。
Content-Type: video/x-flv
私はpythonとWebプログラミング一般に不慣れです。有益な洞察は大歓迎です。また、詳しい情報が必要な場合はお知らせください。
この投稿を読んでくれてありがとう
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のドキュメントを見てください:
Content-Type text/html
本当に、そのように、コロンなしで?
もしそうなら、それはそれを説明するかもしれません:それは無効なヘッダーなので無視されますので、urllibは代わりにファイル名を見てコンテンツタイプを推測します。 URLの末尾に「.flv」がある場合、タイプはvideo/x-flv
。
この独特の不一致は、2つの要求によって送信される異なるヘッダー(おそらく受け入れの種類のもの)によって説明される可能性があります-確認できますか?または、JavaScriptがFirefoxで実行されている場合(Firebugを実行しているときに使用していると思いますか?)-Pythonケースでは絶対に実行されないため、 "すべての賭けは彼らが言うように、オフ」;-)。
Webサーバーは、リクエストの違いに基づいて、同じURLに対して異なる結果を返す可能性があることに注意してください。たとえば、コンテンツタイプネゴシエーション:リクエスターは受け入れるコンテンツタイプのリストを指定でき、サーバーはさまざまな結果を返してさまざまなニーズに対応できます。
また、リクエストのいずれかについてエラーページが表示される場合があります。たとえば、形式が正しくない、または適切に認証するためのCookieが設定されていないなどです。レスポンス自体を見て、何が表示されているかを確認してください。
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')
も問題なく動作しますが、urlib2ドキュメントには記載されていません...