Ich versuche hier, die Header einer bestimmten URL abzurufen, damit ich den MIME-Typ bestimmen kann. Ich möchte sehen können, ob beispielsweise http://somedomain/foo/
ein HTML-Dokument oder ein JPEG-Bild zurückgegeben wird. Daher muss ich herausfinden, wie eine HEAD-Anfrage gesendet wird, damit ich den MIME-Typ lesen kann, ohne den Inhalt herunterladen zu müssen. Kennt jemand einen einfachen Weg, dies zu tun?
python
python-2.7
http
http-headers
content-type
fuentesjr
quelle
quelle
urlparse
zur Hand zu haben , was durch eine Antwort mit niedrigerem Rang angezeigt wird.httplib
wird umbenannt inhttp.client
.requests
nicht standardmäßig mit Python ausgeliefert.urllib2 kann verwendet werden, um eine HEAD-Anforderung auszuführen. Dies ist etwas besser als die Verwendung von httplib, da urllib2 die URL für Sie analysiert, anstatt dass Sie die URL in Hostnamen und Pfad aufteilen müssen.
Header sind wie bisher über response.info () verfügbar. Interessanterweise finden Sie die URL, zu der Sie umgeleitet wurden:
quelle
httplib.HTTPConnection
, der Weiterleitungen nicht automatisch verarbeitet.Obligatorischer
Requests
Weg:quelle
Ich glaube, die Anforderungsbibliothek sollte ebenfalls erwähnt werden.
quelle
allow_redirects
kann nur POST / PUT / DELETE-Weiterleitungen deaktivieren. Beispiel: Kopf Anfrage keine WeiterleitungGerade:
Bearbeiten: Ich habe gerade festgestellt, dass es httplib2: D gibt
Link Text
quelle
request
. (Das heißt, es wird funktionieren, aber es ist ein schlechter Stil und wenn Sie es verwenden wolltenself
- hart.)Der Vollständigkeit halber muss eine Python3-Antwort der akzeptierten Antwort mit httplib entsprechen .
Es ist im Grunde der gleiche Code nur , dass die Bibliothek nicht genannt wird httplib mehr , sondern http.client
quelle
quelle
import
? +1 für dieurlparse
- zusammen mithttplib
geben sie den Komfort vonurllib2
, wenn sie mit URLs auf der Eingabeseite umgehen.Wenn Sie die httplib verwenden (mindestens in 2.5.2), wird der Versuch, die Antwort einer HEAD-Anforderung zu lesen, blockiert (in der Readline) und schlägt anschließend fehl. Wenn Sie die Antwort nicht lesen, können Sie keine weitere Anfrage für die Verbindung senden. Sie müssen eine neue öffnen. Oder akzeptieren Sie eine lange Verzögerung zwischen Anfragen.
quelle
Ich habe festgestellt, dass httplib etwas schneller als urllib2 ist. Ich habe zwei Programme zeitgesteuert - eines mit httplib und das andere mit urllib2 - und HEAD-Anfragen an 10.000 URLs gesendet. Die httplib war um einige Minuten schneller. Die Gesamtstatistik von httplib war: real 6m21.334s Benutzer 0m2.124s sys 0m16.372s
Und die Gesamtstatistik von urllib2 war: real 9m1.380s Benutzer 0m16.666s sys 0m28.565s
Hat noch jemand einen Beitrag dazu?
quelle
Und noch ein anderer Ansatz (ähnlich der Antwort von Pawel):
Nur um unbegrenzte Methoden auf Instanzebene zu vermeiden.
quelle
Wahrscheinlich einfacher: Verwenden Sie urllib oder urllib2.
f.info () ist ein wörterbuchähnliches Objekt, daher können Sie f.info () ['Inhaltstyp'] usw. ausführen.
http://docs.python.org/library/urllib.html
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/httplib.html
In den Dokumenten wird darauf hingewiesen, dass httplib normalerweise nicht direkt verwendet wird.
quelle