Mengirim "User-agent" menggunakan perpustakaan Permintaan dengan Python

216

Saya ingin mengirim nilai untuk "User-agent"saat meminta halaman web menggunakan Permintaan Python. Saya tidak yakin apakah boleh mengirim ini sebagai bagian dari tajuk, seperti dalam kode di bawah ini:

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

Informasi debug tidak menunjukkan header yang dikirim selama permintaan.

Apakah dapat mengirim informasi ini di header? Jika tidak, bagaimana saya bisa mengirimnya?

charleslparker
sumber

Jawaban:

323

The user-agentharus ditentukan sebagai bidang di header.

Berikut adalah daftar bidang tajuk HTTP , dan Anda mungkin tertarik pada bidang khusus permintaan , yang termasuk User-Agent.

Jika Anda menggunakan permintaan v2.13 dan yang lebih baru

Cara paling sederhana untuk melakukan apa yang Anda inginkan adalah membuat kamus dan menentukan header Anda secara langsung, seperti:

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)

Jika Anda menggunakan permintaan v2.12.x dan lebih lama

Versi yang lebih lama dari requestsheader default yang rusak, jadi Anda ingin melakukan hal berikut untuk mempertahankan header default dan kemudian menambahkan header Anda sendiri kepada mereka.

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)
wkl
sumber
6
Anda juga dapat mengakses tajuk yang Anda kirim response.request.headers, ini berfungsi karena objek permintaan asli adalah atribut dari objek respons. Lihat juga http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
sini
3
Nilai default juga tersedia sebagai requests.utils.default_user_agent () jika Anda ingin menambahkannya dengan info Anda sendiri.
nealmcb
3
Itu tidak benar. Itu mengacaukan sisa header. Ia harus mendapatkan salinan default dari requests.utils.default_user_agent () dan memperbaruinya, dan mengirimkannya.
Chad Miller
1
untuk kemudahan, di httpbin.org/headers (hal-hal yang dapat diunduh) Anda bisa mendapatkan header browser kemudian membuat permintaan Anda muncul Anda
m3nda
1
Setidaknya dalam 2.13.0, header tidak musnah dan dokumen hanya memberitahu Anda untuk menggunakan headerskwarg.
Jmills
62

Lebih nyaman menggunakan sesi , dengan cara ini Anda tidak harus ingat untuk mengatur header setiap kali:

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

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

Secara default, sesi juga mengelola cookie untuk Anda. Jika Anda ingin menonaktifkannya, lihat pertanyaan ini .

pengguna
sumber