Pythonのリクエストライブラリを使用して「ユーザーエージェント」を送信する


216

"User-agent"Pythonリクエストを使用してウェブページをリクエストしているときに値を送信したいのですが。以下のコードのように、これをヘッダーの一部として送信してもよいかどうかはわかりません。

debug = {'verbose': sys.stderr}
user_agent = {'User-agent': 'Mozilla/5.0'}
response  = requests.get(url, headers = user_agent, config=debug)

デバッグ情報には、リクエスト中に送信されたヘッダーは表示されません。

この情報をヘッダーで送信しても問題ありませんか?そうでない場合、どうすれば送信できますか?

回答:


322

user-agentヘッダ内のフィールドとして指定されるべきです。

以下はHTTPヘッダーフィールドのリストです。おそらく、を含むリクエスト固有のフィールドに興味がありますUser-Agent

リクエストv2.13以降を使用している場合

あなたが望むことをする最も簡単な方法は、次のように辞書を作成してヘッダーを直接指定することです:

import requests

url = 'SOME URL'

headers = {
    'User-Agent': 'My User Agent 1.0',
    'From': 'youremail@domain.com'  # This is another valid field
}

response = requests.get(url, headers=headers)

リクエストv2.12.x以前を使用している場合

古くなったrequestsデフォルトヘッダーの古いバージョンなので、デフォルトヘッダーを保存して独自のヘッダーを追加するには、次のようにします。

import requests

url = 'SOME URL'

# Get a copy of the default headers that requests would use
headers = requests.utils.default_headers()

# Update the headers with your custom ones
# You don't have to worry about case-sensitivity with
# the dictionary keys, because default_headers uses a custom
# CaseInsensitiveDict implementation within requests' source code.
headers.update(
    {
        'User-Agent': 'My User Agent 1.0',
    }
)

response = requests.get(url, headers=headers)

6
で送信したヘッダーにアクセスすることもできresponse.request.headersます。これは、元のリクエストオブジェクトがレスポンスオブジェクトの属性であるため機能します。http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
ここ

3
独自の情報でデフォルト値を追加したい場合は、デフォルト値をrequests.utils.default_user_agent()として使用することもできます。
nealmcb

3
不正解です。残りのヘッダーを上書きします。彼は、requests.utils.default_user_agent()からデフォルトのコピーを取得して更新し、それらを送信する必要があります。
Chad Miller

1
簡単にするために、httpbin.org / headers(ダウンロード可能なもの)でブラウザーのヘッダーを取得し、クエリを表示させることができます
m3nda

1
少なくともで2.13.0は、ヘッダーは破壊されず、ドキュメントheaderskwarg を使用するように指示するだけです。
Jmills、2017年

62

セッションを使用する方が便利です。これにより、毎回ヘッダーを設定することを覚えておく必要がなくなります。

session = requests.Session()
session.headers.update({'User-Agent': 'Custom user agent'})

session.get('https://httpbin.org/headers')

デフォルトでは、セッションはCookieも管理します。それを無効にしたい場合は、この質問を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.