Aujourd'hui, je devais récupérer les données de la réponse en-tête http. Mais comme je ne l’ai jamais fait auparavant et qu’il n’ya pas grand-chose que vous puissiez trouver sur Google à ce sujet. J'ai décidé de poser ma question ici.
Question actuelle: comment imprimer les données de réponse de l'en-tête http en python? Je travaille dans Python3.5 avec le module de demandes et je n'ai pas encore trouvé le moyen de le faire.
Que diriez-vous quelque chose comme ça:
import urllib2
req = urllib2.Request('http://www.google.com/')
res = urllib2.urlopen(req)
print res.info()
res.close();
Si vous recherchez quelque chose de spécifique dans l'en-tête:
For Date: print res.info().get('Date')
Update : Selon le commentaire de OP, seuls les en-têtes de réponse sont nécessaires. Encore plus facile comme écrit dans la documentation du module Requests ci-dessous:
Nous pouvons afficher les en-têtes de réponse du serveur à l'aide d'un dictionnaire Python:
>>> r.headers
{
'content-encoding': 'gzip',
'transfer-encoding': 'chunked',
'connection': 'close',
'server': 'nginx/1.0.4',
'x-runtime': '148ms',
'etag': '"e1ca502697e5c9317743dc078f67693f"',
'content-type': 'application/json'
}
Et surtout les notes de documentation:
Le dictionnaire est spécial, cependant: il est fait uniquement pour les en-têtes HTTP. Selon la RFC 7230, les noms d'en-tête HTTP ne respectent pas la casse.
Nous pouvons donc accéder aux en-têtes à l'aide de la capitalisation souhaitée:
et continue en expliquant encore plus astucieux concernant la conformité RFC.
La demande la documentation indique:
Utiliser Response.iter_content gérera beaucoup de ce que vous auriez autrement à gérer si vous utilisez directement Response.raw. Lorsque vous transférez un téléchargement, la procédure ci-dessus est la méthode recommandée pour récupérer le contenu.
Il offre comme exemple:
>>> r = requests.get('https://api.github.com/events', stream=True)
>>> r.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> r.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
Mais offre également des conseils pratiques sur la manière de le faire en redirigeant vers un fichier, etc. et en utilisant une méthode différente:
Utiliser Response.iter_content gérera beaucoup de ce que vous auriez autrement à gérer si vous utilisez Response.raw directement
Essayez d'utiliser req.headers
et c'est tout. Vous obtiendrez les en-têtes de réponse;)
J'utilise le module urllib, avec le code suivant:
from urllib import request
with request.urlopen(url, data) as f:
print(f.getcode()) # http response code
print(f.info()) # all header info
resp_body = f.read().decode('utf-8') # response body
import requests
site = "https://www.google.com"
headers = requests.get(site).headers
print(headers)
print(headers["domain"])