Invio di "User-agent" utilizzando la libreria Requests in Python


217

Voglio inviare un valore "User-agent"durante la richiesta di una pagina Web utilizzando le richieste Python. Non sono sicuro se sia corretto inviarlo come parte dell'intestazione, come nel codice seguente:

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

Le informazioni di debug non mostrano le intestazioni inviate durante la richiesta.

È accettabile inviare queste informazioni nell'intestazione? In caso contrario, come posso inviarlo?

Risposte:


324

L' user-agentopportuno precisare come un campo nell'intestazione.

Ecco un elenco di campi di intestazione HTTP e probabilmente saresti interessato a campi specifici della richiesta , che include User-Agent.

Se stai usando le richieste v2.13 e successive

Il modo più semplice per fare ciò che vuoi è creare un dizionario e specificare direttamente le intestazioni, in questo modo:

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)

Se stai utilizzando le richieste v2.12.x e precedenti

Versioni precedenti di requestsintestazioni predefinite bloccate, quindi ti consigliamo di effettuare le seguenti operazioni per preservare le intestazioni predefinite e quindi aggiungere le tue.

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
Puoi anche accedere alle intestazioni con cui hai inviato response.request.headers, questo funziona perché l'oggetto richiesta originale è un attributo dell'oggetto risposta. Vedi anche http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
qui

3
Il valore predefinito è disponibile anche come request.utils.default_user_agent () se si desidera solo aumentarlo con le proprie informazioni.
nealmcb,

3
Non è corretto Blocca il resto delle intestazioni. Dovrebbe ottenere una copia dei valori predefiniti da request.utils.default_user_agent () e aggiornarlo e inviarli.
Chad Miller,

1
per semplicità , su httpbin.org/headers (materiale scaricabile) puoi ottenere le intestazioni del browser e far apparire la tua query
m3nda

1
Almeno in 2.13.0, le intestazioni non sono ostruite e i documenti ti dicono solo di usare il headerskwarg.
Jmills,

62

È più comodo usare una sessione , in questo modo non devi ricordarti di impostare le intestazioni ogni volta:

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

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

Per impostazione predefinita, la sessione gestisce anche i cookie per te. Nel caso in cui si desideri disabilitarlo, vedere questa domanda .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.