24

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

Content-Type text/html

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

urllib2.urlopen(URL).info()

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

Content-Type: video/x-flv

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

この記事を読んでくれてありがとう

4

5 に答える 5

37

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

于 2010-03-26T14:04:00.777 に答える
5

コンテンツ タイプ テキスト/html

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

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

于 2009-10-31T13:11:36.010 に答える
2

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

于 2009-10-31T06:21:52.223 に答える
1

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

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

于 2009-10-31T13:16:55.040 に答える
0

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 doc には記載されていませんが、正常に動作します....

于 2012-10-10T12:02:55.050 に答える