Wie setze ich Header mit Pythons Urllib?

78

Ich bin ziemlich neu in Pythons Urllib. Ich muss lediglich einen benutzerdefinierten Header für die Anforderung festlegen, die an den Server gesendet wird. Insbesondere muss ich die Header für Inhaltstyp und Berechtigungen festlegen. Ich habe in der Python-Dokumentation nachgesehen, konnte sie jedoch nicht finden.

ewok
quelle

Antworten:

93

Hinzufügen von HTTP-Headern mit urllib2 :

aus den Dokumenten:

import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
resp = urllib2.urlopen(req)
content = resp.read()
Corey Goldberg
quelle
88

Dies funktioniert sowohl für Python 3 als auch für Python 2:

try:
    from urllib.request import Request, urlopen  # Python 3
except ImportError:
    from urllib2 import Request, urlopen  # Python 2

req = Request('http://api.company.com/items/details?country=US&language=en')
req.add_header('apikey', 'xxx')
content = urlopen(req).read()

print(content)
Cees Timmerman
quelle
Können wir dasselbe mit Anfragen tun? Q.add_header ('apikey', 'xxx')
user3378649
Was meinst du mit @ user3378649?
Cees Timmerman
2
@ user3378649 kann sein, dass Sie requestsPython-Paket benutzerdefinierte Header verwenden
WeizhongTu
1
DIESE Antwort - tausendmal JA (danke!). Ich habe stundenlang versucht, eine gemeinsame Schnittstelle für Python 2 und 3 zu finden (zwischen urllib, urllib2 und urllib3).
Beorn Harris
18

Verwenden Sie urllib2 und erstellen Sie ein Anforderungsobjekt, das Sie dann an urlopen übergeben. http://docs.python.org/library/urllib2.html

Ich benutze die "alte" Urllib nicht mehr wirklich.

req = urllib2.Request("http://google.com", None, {'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'})
response = urllib2.urlopen(req).read()

ungetestet....

schlaflos
quelle
2

Gehen Sie für mehrere Header wie folgt vor:

import urllib2
req = urllib2.Request('http://www.example.com/')
req.add_header('param1', '212212')
req.add_header('param2', '12345678')
req.add_header('other_param1', 'sample')
req.add_header('other_param2', 'sample1111')
req.add_header('and_any_other_parame', 'testttt')
resp = urllib2.urlopen(req)
content = resp.read()
Gil Allen
quelle