今日私は実際にhttp-header応答からデータを取得する必要がありました。しかし、私はこれまでにそれをやったことがなく、これについてGoogleで見つけられるものはあまりありません。ここで質問することにしました。
だから実際の質問:どのようにしてHTTPヘッダー応答データをPythonで出力するのですか?私はリクエストモジュールを使用してPython3.5で作業していますが、これを行う方法をまだ見つけていません。
Update:OPのコメントに基づいて、応答ヘッダーのみが必要であることを示します。以下のRequestsモジュールのドキュメントに記載されているように、さらに簡単です。
Python辞書を使用して、サーバーの応答ヘッダーを表示できます。
>>> r.headers
{
'content-encoding': 'gzip',
'transfer-encoding': 'chunked',
'connection': 'close',
'server': 'nginx/1.0.4',
'x-runtime': '148ms',
'etag': '"e1ca502697e5c9317743dc078f67693f"',
'content-type': 'application/json'
}
そして特にドキュメントノート:
辞書は特別ですが、HTTPヘッダー専用に作成されています。 RFC 7230によると、HTTPヘッダー名では大文字と小文字が区別されません。
したがって、必要な大文字を使用してヘッダーにアクセスできます。
さらに、RFCコンプライアンスに関するさらに賢いことを説明します。
ドキュメントのリクエスト は次のように述べています。
Response.iter_contentを使用すると、Response.rawを直接使用する場合に処理しなければならないことの多くを処理できます。ダウンロードをストリーミングする場合、コンテンツを取得するために上記が推奨される推奨される方法です。
それは例として提供しています:
>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
しかし、ファイルなどにリダイレクトして別の方法を使用して実際にそれを行う方法についてのアドバイスも提供します。
Response.iter_contentを使用すると、Response.rawを直接使用する場合に処理しなければならないことの多くを処理できます。
このようなものはどうですか:
import urllib2
req = urllib2.Request('http://www.google.com/')
res = urllib2.urlopen(req)
print res.info()
res.close();
ヘッダーで何か特定のものを探している場合:
For Date: print res.info().get('Date')
req.headers
そしてそれがすべてです。応答ヘッダーが表示されます;)
次のコードでurllibモジュールを使用しています。
from urllib import request
with request.urlopen(url, data) as f:
print(f.getcode()) # http response code
print(f.info()) # all header info
resp_body = f.read().decode('utf-8') # response body
import requests
site = "https://www.google.com"
headers = requests.get(site).headers
print(headers)
print(headers["domain"])