web-dev-qa-db-ja.com

PythonのRequestsライブラリを使った "User-agent"の送信

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

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

デバッグ情報は、要求中に送信されているヘッダーを示していません。

この情報をヘッダーに入れて送信してもかまいませんか。そうでなかったら、どうすればそれを送ることができますか。

186
user1289853

user-agentは、ヘッダー内のフィールドとして指定する必要があります。

これは HTTPヘッダーフィールドのリスト です。おそらくUser-Agentを含む 要求固有のフィールド に興味があるでしょう。

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

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

import requests

url = 'SOME URL'

headers = {
    'User-Agent': 'My User Agent 1.0',
    'From': '[email protected]'  # 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)
274
wkl

session を使用するほうが便利です。こうすることで、毎回ヘッダーを設定する必要がなくなります。

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

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

デフォルトでは、sessionはあなたのためにクッキーも管理します。無効にしたい場合は、 この質問 を参照してください。

41
user