web-dev-qa-db-ja.com

Python urllib2応答ヘッダー

URLリクエストのレスポンスヘッダーを抽出しようとしています。 firebugを使用してURL要求の応答出力を分析すると、次のように返されます。

Content-Type text/html

ただし、pythonコードを使用する場合:

urllib2.urlopen(URL).info()

結果の出力は以下を返します。

Content-Type: video/x-flv

私はpythonとWebプログラミング一般に不慣れです。有益な洞察は大歓迎です。また、詳しい情報が必要な場合はお知らせください。

この投稿を読んでくれてありがとう

24
looter

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

37
qingbo

Content-Type text/html

本当に、そのように、コロンなしで?

もしそうなら、それはそれを説明するかもしれません:それは無効なヘッダーなので無視されますので、urllibは代わりにファイル名を見てコンテンツタイプを推測します。 URLの末尾に「.flv」がある場合、タイプはvideo/x-flv

5
bobince

この独特の不一致は、2つの要求によって送信される異なるヘッダー(おそらく受け入れの種類のもの)によって説明される可能性があります-確認できますか?または、JavaScriptがFirefoxで実行されている場合(Firebugを実行しているときに使用していると思いますか?)-Pythonケースでは絶対に実行されないため、 "すべての賭けは彼らが言うように、オフ」;-)。

2
Alex Martelli

Webサーバーは、リクエストの違いに基づいて、同じURLに対して異なる結果を返す可能性があることに注意してください。たとえば、コンテンツタイプネゴシエーション:リクエスターは受け入れるコンテンツタイプのリストを指定でき、サーバーはさまざまな結果を返してさまざまなニーズに対応できます。

また、リクエストのいずれかについてエラーページが表示される場合があります。たとえば、形式が正しくない、または適切に認証するためのCookieが設定されていないなどです。レスポンス自体を見て、何が表示されているかを確認してください。

1
Ned Batchelder

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ドキュメントには記載されていません...

0
modzello86