Ich suche nach einer Möglichkeit in Python (2.7), HTTP-Anfragen mit drei Anforderungen auszuführen:
Ich habe ziemlich alle Python-HTTP-Libraries überprüft, aber keine von ihnen erfüllt meine Anforderungen. Zum Beispiel:
urllib2: gut, aber kein Pooling
%Vor%Anfragen: keine maximale Größe
%Vor%urllib3: Die "read" -Methode hat nie funktioniert, auch nicht mit einer 50Mo-Datei ...
Ссылка
Ich kann kaum glauben, dass urllib2 die beste HTTP-Bibliothek ist, die ich verwenden kann! Also, wenn jemand weiß, was librairy kann dies tun oder wie eine der vorherigen librairy verwenden ...
BEARBEITEN:
Die beste Lösung, die ich dank Martijn Pieters gefunden habe (StringIO verlangsamt selbst bei großen Dateien nicht, wo str adition viel tut).
%Vor% Sie können es mit requests
einfach machen; aber Sie müssen wissen, dass das raw
-Objekt ein Teil der urllib3
-Drähte ist und die zusätzlichen Argumente verwendet, die HTTPResponse.read()
Aufruf unterstützt, mit dem Sie angeben können, dass Sie dekodierte Daten lesen möchten:
Alternativ können Sie das decode_content
-Flag am Objekt raw
vor dem Lesen setzen:
Wenn Sie nicht in urllib3
guts so hineingreifen möchten, verwenden Sie die response.iter_content()
, um den dekodierten Inhalt in Chunks zu durchlaufen; Dies verwendet auch das zugrunde liegende HTTPResponse
(mit dem .stream()
Generatorversion :
Hier gibt es einen feinen Unterschied darin, wie komprimierte Datengrößen hier gehandhabt werden; r.raw.read(100000+1)
liest immer nur 100 kB komprimierte Daten; Die unkomprimierten Daten werden anhand Ihrer maximalen Größe getestet. Die Methode iter_content()
liest mehr unkomprimierte Daten , wenn der komprimierte Datenstrom größer als die unkomprimierten Daten ist.
Keine der Methoden erlaubt r.json()
zu arbeiten; Das response._content
-Attribut wird von diesen nicht festgelegt. Sie können dies natürlich manuell tun. Aber da die Aufrufe .raw.read()
und .iter_content()
bereits Zugriff auf den fraglichen Inhalt gewähren, ist dies wirklich nicht nötig.
Tags und Links python http timeout connection-pooling max-size