wake-up-neo.com

So drucken Sie den http-response-Header in Python aus

Heute musste ich tatsächlich Daten aus der http-Header-Antwort abrufen. Aber da ich es noch nie gemacht habe und auch nicht viel darüber bei Google zu finden ist. Ich habe mich entschlossen, meine Frage hier zu stellen.

Also aktuelle Frage: Wie druckt man die http-Header-Antwortdaten in Python aus? Ich arbeite in Python3.5 mit dem Requests-Modul und muss noch einen Weg finden, dies zu tun.

4
Naomi

Wie wäre es mit so etwas:

import urllib2
req = urllib2.Request('http://www.google.com/')
res = urllib2.urlopen(req)
print res.info()
res.close();

Wenn Sie im Header nach etwas Bestimmtem suchen:

For Date: print res.info().get('Date')
6
NepCoder

Update : Basierend auf dem Kommentar von OP, dass nur die Antwortheader benötigt werden. Noch einfacher als in der folgenden Dokumentation des Requests-Moduls beschrieben:

Wir können die Antwortheader des Servers mithilfe eines Python-Wörterbuchs anzeigen:

>>> r.headers
{
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '148ms',
    'etag': '"e1ca502697e5c9317743dc078f67693f"',
    'content-type': 'application/json'
}

Und vor allem die Dokumentationshinweise:

Das Wörterbuch ist jedoch etwas Besonderes: Es ist nur für HTTP-Header gedacht. Gemäß RFC 7230 ist für HTTP-Headernamen die Groß- und Kleinschreibung nicht zu beachten.

So können wir mit jeder beliebigen Kapitalisierung auf die Header zugreifen:

und erklärt noch mehr Klugheit bezüglich der RFC-Konformität.

Die Requests Dokumentation besagt:

Wenn Sie Response.iter_content verwenden, wird einiges erledigt, was Sie sonst bei einer direkten Verwendung von Response.raw zu tun hätten. Wenn Sie einen Download streamen, ist dies der bevorzugte und empfohlene Weg, um den Inhalt abzurufen.

Es bietet als Beispiel:

>>> 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'

Bietet jedoch auch Tipps, wie Sie dies in der Praxis tun, indem Sie auf eine Datei usw. umleiten und eine andere Methode verwenden:

Wenn Sie Response.iter_content verwenden, wird viel von dem erledigt, was Sie sonst tun müssten, wenn Sie Response.raw direkt verwenden

4
Dilettant

Versuchen Sie, req.headers zu verwenden, und das ist alles. Sie erhalten die Antwortheader;)

1
Utkarsh Agrawal

Ich verwende das urllib-Modul mit dem folgenden Code:

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
1
Kevin Liu

einfach

import requests

site = "https://www.google.com"
headers = requests.get(site).headers
print(headers)

wenn du etwas bestimmtes willst

print(headers["domain"]) 
0
J0KER11