การส่ง“ User-agent” โดยใช้ไลบรารีคำขอใน 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)

ข้อมูลการดีบักไม่แสดงส่วนหัวที่ถูกส่งระหว่างการร้องขอ

เป็นที่ยอมรับหรือไม่ที่จะส่งข้อมูลนี้ในส่วนหัว? ถ้าไม่ฉันจะส่งมันได้อย่างไร

คำตอบ:


323

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

62

สะดวกกว่าในการใช้เซสชั่นด้วยวิธีนี้คุณไม่จำเป็นต้องจำหัวข้อในแต่ละครั้ง:

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

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

ตามค่าเริ่มต้นเซสชันจะจัดการคุกกี้ให้คุณด้วย ในกรณีที่คุณต้องการปิดใช้งานให้ดูคำถามนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.