Größe der raw-Antwort in bytes
Ich brauche, um eine HTTP-Anfrage und bestimmen die Reaktion Größe in bytes. Ich habe immer verwendet request
für einfache HTTP-Anfragen, aber ich Frage mich, ob ich diese erreichen können mit raw?
>>> r = requests.get('https://github.com/', stream=True)
>>> r.raw
Mein problem ist nur ich verstehe nicht, was raw oder gibt zurück, wie ich konnte darauf zählen, dass diese Daten-Typ in bytes? Ist mit request
- und raw-der richtige Ansatz?
InformationsquelleAutor ewhitt | 2014-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen Sie einfach die
len()
den Inhalt der Antwort:Wenn Sie möchten, um das streaming, zum Beispiel, wenn die Inhalte (zu) groß, dass man iterieren über Stücke von den Daten und der Summe Ihrer Größen:
Content-length
oder kommt es tatsächlich zu Messen, den vollen Inhalt? Auch, Antwort.Inhalte sind z.B. HTTP-Header?Das macht die Bestimmung der tatsächlichen Länge des Inhalts. Zumindest die Github-Seite vor nicht senden eine
Content-length
header.Ja der Wert ist in bytes, weil
response.content
ist Byte und nicht in Zeichen. Wenn Sie möchten, die Zeichen verwenden, dieresponse.text
Attribut. Natürlich macht dies nur Sinn, wenn der Körper tatsächlich ist text. Wenn es ein Bild ist zum Beispiel, du bekommst Müll oder eine Dekodierung Fehler beim Zugriff auf dietext
Attribut.Die OP ist die Verwendung einer streaming-Antwort, Zugriff auf
r.content
wird zum laden der Daten in den Speicher erste, und das ist in der Regel nicht, was Sie wollen, wenn streaming die Antwort.Nein, diese Antwort ist nicht korrekt. Siehe Content-length-header nicht das gleiche, wie wenn die manuelle Berechnung? für eine genaue Methode.
InformationsquelleAutor BlackJack
r.raw
ist eine Instanz von urllib3.Antwort.HTTPResponse. Zählen wir die Länge der Antwort durch einen Blick in den response-headerContent-length
oder verwenden Sie die integrierte Funktionlen()
.Content-length
ist nicht immer gegeben.Wenn es keine
Content-length
header, dann können Sie nicht wissen, die volle Länge, bis Sie haben alle Daten bekommen. Zugriff aufr.content
Kräfte das Problem, dass liest aus derraw
Verbindung, bis alle Daten gelesen sind, Gebäude bis das komplette Dokument in den Speicher. Sie können auch nicht verwendenstream=True
in diesem Fall.was
gzip
Antworten, die es automatisch dekomprimiert, solen(r.content)
keine wahre Antwort Größe ... ?was ist mit denen? Wenn Sie brauchen, um wissen der HTTP-body Größe der Antwort und es gibt keinen content-length-header, dann finden Sie unter stackoverflow.com/questions/50825528/...
vielen Dank) habe ich gestern fertig mit einfach das urllib Antwort.read() 🙂
InformationsquelleAutor defool