Senden von "User-Agent" mithilfe der Requests-Bibliothek in Python

216

Ich möchte einen Wert senden, "User-agent"während ich eine Webseite mit Python Requests anfordere. Ich bin nicht sicher, ob es in Ordnung ist, dies als Teil des Headers zu senden, wie im folgenden Code:

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

Die Debug-Informationen zeigen nicht die Header an, die während der Anforderung gesendet werden.

Ist es akzeptabel, diese Informationen in der Kopfzeile zu senden? Wenn nicht, wie kann ich es senden?

charleslparker
quelle

Antworten:

322

Das user-agent sollte als Feld in der Kopfzeile angegeben werden.

Hier ist eine Liste von HTTP-Header-Feldern , und Sie wären wahrscheinlich an anforderungsspezifischen Feldern interessiert , einschließlich User-Agent.

Wenn Sie Anforderungen ab Version 2.13 verwenden

Der einfachste Weg, das zu tun, was Sie wollen, besteht darin, ein Wörterbuch zu erstellen und Ihre Header direkt anzugeben, wie folgt:

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)

Wenn Sie Anforderungen v2.12.x und älter verwenden

Ältere Versionen von requestsüberlasteten Standardheadern. Führen Sie daher die folgenden Schritte aus, um die Standardheader beizubehalten und ihnen dann Ihre eigenen hinzuzufügen.

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
quelle
6
Sie können auch auf die Header zugreifen, mit denen Sie gesendet response.request.headershaben. Dies funktioniert, da das ursprüngliche Anforderungsobjekt ein Attribut des Antwortobjekts ist. Siehe auch http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
hier
3
Der Standardwert ist auch als request.utils.default_user_agent () verfügbar, wenn Sie dies nur mit Ihren eigenen Informationen ergänzen möchten.
Nealmcb
3
Das ist nicht richtig. Es verstopft den Rest der Header. Er sollte eine Kopie der Standardeinstellungen von request.utils.default_user_agent () erhalten, diese aktualisieren und diese senden.
Chad Miller
1
Zur Vereinfachung können Sie auf httpbin.org/headers (herunterladbares Material ) die Browser-Header
abrufen
1
Zumindest in 2.13.0sind die Header nicht überlastet und die Dokumente fordern Sie lediglich auf, das headerskwarg zu verwenden.
Jmills
62

Es ist bequemer, eine Sitzung zu verwenden . Auf diese Weise müssen Sie nicht jedes Mal daran denken, Header festzulegen:

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

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

Standardmäßig verwaltet die Sitzung auch Cookies für Sie. Falls Sie dies deaktivieren möchten, lesen Sie diese Frage .

Benutzer
quelle