Wysyłanie „User-agent” przy użyciu biblioteki żądań w Pythonie

216

Chcę wysłać wartość "User-agent"podczas żądania strony internetowej za pomocą Python Requests. Nie jestem pewien, czy można wysłać to jako część nagłówka, jak w poniższym kodzie:

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

Informacje debugowania nie pokazują nagłówków wysyłanych podczas żądania.

Czy można przesłać tę informację w nagłówku? Jeśli nie, jak mogę to wysłać?

charleslparker
źródło

Odpowiedzi:

323

user-agentPowinny być określone jako pole w nagłówku.

Oto lista pól nagłówka HTTP i prawdopodobnie zainteresują Cię pola specyficzne dla żądania , które obejmują User-Agent.

Jeśli korzystasz z żądań wer. 2.13 i nowszych

Najprostszym sposobem na zrobienie tego, co chcesz, jest utworzenie słownika i bezpośrednie określenie nagłówków:

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)

Jeśli korzystasz z żądań v2.12.xi starszych

Starsze wersje requestsspakowanych domyślnych nagłówków, więc wykonaj następujące czynności, aby zachować domyślne nagłówki, a następnie dodać własne.

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
źródło
6
Możesz również uzyskać dostęp do nagłówków, które wysłałeś response.request.headers, to działa, ponieważ oryginalny obiekt żądania jest atrybutem obiektu odpowiedzi. Zobacz także http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
tutaj
3
Wartość domyślna jest również dostępna jako requests.utils.default_user_agent (), jeśli chcesz po prostu rozszerzyć ją o własne informacje.
nealmcb
3
To jest niepoprawne. Blokuje resztę nagłówków. Powinien pobrać kopię wartości domyślnych z requests.utils.default_user_agent () i zaktualizować ją, a następnie wysłać.
Chad Miller,
1
dla ułatwienia na httpbin.org/headers (materiały do ​​pobrania) możesz pobrać nagłówki przeglądarki, a następnie sprawić, by zapytanie wyglądało na Ciebie
m3nda
1
Przynajmniej w 2.13.0, nagłówki nie są zapchane, a dokumenty po prostu mówią ci, abyś używał headerskwarga.
Jmills
62

Wygodniej jest korzystać z sesji , dzięki czemu nie musisz pamiętać o ustawianiu nagłówków za każdym razem:

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

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

Domyślnie sesja zarządza również plikami cookie. Jeśli chcesz to wyłączyć, zobacz to pytanie .

użytkownik
źródło