Ce que j'essaie de faire ici, c'est d'obtenir les en-têtes d'une URL donnée afin que je puisse déterminer le type MIME. Je veux pouvoir voir si http://somedomain/foo/
retournera un document HTML ou une image JPEG par exemple. Ainsi, je dois comprendre comment envoyer une requête HEAD afin de pouvoir lire le type MIME sans avoir à télécharger le contenu. Quelqu'un connaît-il un moyen facile de faire cela?
python
python-2.7
http
http-headers
content-type
fuentesjr
la source
la source
urlparse
sous la main, ce qui est montré par une réponse de rang inférieur.httplib
est renommé enhttp.client
.requests
n'est pas livré avec Python par défaut.urllib2 peut être utilisé pour exécuter une requête HEAD. C'est un peu plus agréable que d'utiliser httplib car urllib2 analyse l'URL pour vous au lieu de vous obliger à diviser l'URL en nom d'hôte et chemin.
Les en-têtes sont disponibles via response.info () comme auparavant. Fait intéressant, vous pouvez trouver l'URL vers laquelle vous avez été redirigé:
la source
httplib.HTTPConnection
, qui ne gère pas automatiquement les redirections.Requests
Manière obligatoire :la source
Je pense que la bibliothèque Requests devrait également être mentionnée.
la source
allow_redirects
ne peut désactiver que les redirections POST / PUT / DELETE. Exemple: head request no redirectJuste:
Edit: je viens de réaliser qu'il y a httplib2: D
texte du lien
la source
request
. (À savoir, cela fonctionnera mais c'est un mauvais style et si vous vouliez l'utiliserself
- difficile.)Pour être complet, avoir une réponse Python3 équivalente à la réponse acceptée en utilisant httplib .
Il est fondamentalement le même code juste que la bibliothèque est pas appelée httplib plus mais http.client
la source
la source
import
? +1 pour leurlparse
- avec,httplib
ils donnent le confort deurllib2
, lorsqu'il s'agit d'URL du côté de l'entrée.En passant, lors de l'utilisation de httplib (au moins sur 2.5.2), essayer de lire la réponse d'une requête HEAD bloquera (sur readline) et échouera par la suite. Si vous n'émettez pas de lecture sur la réponse, vous ne parvenez pas à envoyer une autre demande sur la connexion, vous devrez en ouvrir une nouvelle. Ou acceptez un long délai entre les demandes.
la source
J'ai trouvé que httplib est légèrement plus rapide que urllib2. J'ai chronométré deux programmes - l'un utilisant httplib et l'autre utilisant urllib2 - envoyant des requêtes HEAD à 10000 URL. Celui de httplib était plus rapide de plusieurs minutes. Les statistiques totales de httplib étaient: utilisateur réel 6m21.334s 0m2.124s sys 0m16.372s
Et les statistiques totales de urllib2 étaient les suivantes: utilisateur réel de 9m1.380s 0m16.666s sys 0m28.565s
Quelqu'un d'autre a-t-il des commentaires à ce sujet?
la source
Et encore une autre approche (similaire à la réponse de Pawel):
Juste pour éviter d'avoir des méthodes illimitées au niveau de l'instance.
la source
Probablement plus simple: utilisez urllib ou urllib2.
f.info () est un objet de type dictionnaire, vous pouvez donc faire f.info () ['content-type'], etc.
http://docs.python.org/library/urllib.html
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/httplib.html
La documentation note que httplib n'est normalement pas utilisé directement.
la source