Gửi thư điện tử Tác nhân người dùng bằng cách sử dụng thư viện Requests trong Python


216

Tôi muốn gửi một giá trị "User-agent"trong khi yêu cầu một trang web bằng Yêu cầu Python. Tôi không chắc chắn liệu có ổn không khi gửi cái này như một phần của tiêu đề, như trong đoạn mã dưới đây:

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

Thông tin gỡ lỗi không hiển thị các tiêu đề được gửi trong khi yêu cầu.

Có thể chấp nhận để gửi thông tin này trong tiêu đề? Nếu không, làm thế nào tôi có thể gửi nó?

Câu trả lời:


322

Các user-agentnên được quy định như một lĩnh vực trong tiêu đề.

Dưới đây là danh sách các trường tiêu đề HTTP và có lẽ bạn sẽ quan tâm đến các trường dành riêng cho yêu cầu , bao gồm User-Agent.

Nếu bạn đang sử dụng các yêu cầu v2.13 trở lên

Cách đơn giản nhất để làm những gì bạn muốn là tạo một từ điển và chỉ định trực tiếp các tiêu đề của bạn, như vậy:

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)

Nếu bạn đang sử dụng các yêu cầu v2.12.x trở lên

Các phiên bản cũ hơn của requeststiêu đề mặc định bị ghi đè, vì vậy bạn muốn thực hiện các thao tác sau để giữ nguyên các tiêu đề mặc định và sau đó thêm tiêu đề của riêng bạn vào chúng.

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
Bạn cũng có thể truy cập các tiêu đề bạn đã gửi response.request.headers, điều này hoạt động vì đối tượng yêu cầu ban đầu là một thuộc tính của đối tượng phản hồi. Xem thêm http://docs.python-requests.org/en/latest/user/advified/#request-and-response-objects
tại đây vào

3
Giá trị mặc định cũng có sẵn dưới dạng request.utils.default_user_agent () nếu bạn muốn tăng thêm thông tin đó bằng thông tin của riêng bạn.
nealmcb

3
Nó không chính xác. Nó chặn phần còn lại của các tiêu đề. Anh ta sẽ nhận được một bản sao mặc định từ request.utils.default_user_agent () và cập nhật nó, và gửi chúng.
Chad Miller

1
để dễ dàng, trên httpbin.org/headers (nội dung có thể tải xuống), bạn có thể lấy các tiêu đề trình duyệt sau đó làm cho truy vấn của bạn xuất hiện
m3nda

1
Ít nhất là trong 2.13.0, các tiêu đề không bị ghi đè và các tài liệu chỉ bảo bạn sử dụng headerskwarg.
Jmills

62

Sử dụng phiên này thuận tiện hơn , theo cách này bạn không cần phải nhớ đặt tiêu đề mỗi lần:

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

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

Theo mặc định, phiên cũng quản lý cookie cho bạn. Trong trường hợp bạn muốn vô hiệu hóa điều đó, hãy xem câu hỏi này .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.