web-dev-qa-db-fra.com

Comment envoyer un en-tête personnalisé avec urllib2 dans une requête HTTP?

Je souhaite envoyer un en-tête "Accepter" personnalisé dans ma demande lorsque j'utilise urllib2.urlopen (..). Comment je fais ça?

62
Joakim

Pas assez. La création d'un objet Request n'envoie pas réellement la demande et les objets Request n'ont pas de méthode Read(). (Aussi: read() est en minuscules.) Tout ce que vous avez à faire est de passer Request comme premier argument à urlopen() et cela vous donnera votre réponse.

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

J'utilise normalement:

import urllib2

request_headers = {
"Accept-Language": "en-US,en;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://thewebsite.com",
"Connection": "keep-alive" 
}

request = urllib2.Request("https://thewebsite.com", headers=request_headers)
response = urllib2.urlopen(request).read()
print(response)
15
Pedro Lobito

Outre les autres solutions déjà mentionnées, vous pouvez utiliser add_header méthode.

Ainsi, l'exemple fourni py @pantsgolem sera:

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

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

##Show the header having the key 'Accept'
request.get_header('Accept')

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