68 Stimmen

Wie sende ich einen benutzerdefinierten Header mit urllib2 in einer HTTP-Anfrage?

Ich möchte einen benutzerdefinierten "Accept"-Header in meiner Anfrage senden, wenn ich urllib2.urlopen(..) verwende. Wie mache ich das?

132voto

pantsgolem Punkte 2330

Nicht ganz. Das Erstellen eines Request-Objekts sendet den Request tatsächlich nicht und Request-Objekte haben keine Read()-Methode. (Außerdem: read() wird klein geschrieben.) Alles was Sie tun müssen, ist den Request als ersten Argument an urlopen() zu übergeben und das wird Ihnen Ihre Antwort geben.

import urllib2
request = urllib2.Request("http://www.google.com", headers={"Accept" : "text/html"})
contents = urllib2.urlopen(request).read()

18voto

Pedro Lobito Punkte 84666

Normalerweise verwende ich:

import urllib2

request_headers = {
"Accept-Language": "de-DE,de;q=0.5",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Referer": "http://dieWebseite.de",
"Connection": "keep-alive" 
}

request = urllib2.Request("https://dieWebseite.de", headers=request_headers)
response = urllib2.urlopen(request).read()
print(response)

2voto

user1314742 Punkte 2665

Abgesehen von den bereits genannten Lösungen könntest du die Methode add_header verwenden.

Also wird das Beispiel von @pantsgolem sein:

import urllib2
request = urllib2.Request("http://www.google.com")

request.add_header('Accept','text/html')

##Zeige den Header mit dem Schlüssel 'Accept'
request.get_header('Accept')

response = urllib2.urlopen(request)
response.read()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X