Lo que trato de hacer aquí es obtener los encabezados de una URL determinada para poder determinar el tipo MIME. Quiero poder ver si http://somedomain/foo/
devolveré un documento HTML o una imagen JPEG, por ejemplo. Por lo tanto, necesito averiguar cómo enviar una solicitud HEAD para poder leer el tipo MIME sin tener que descargar el contenido. ¿Alguien conoce una forma fácil de hacer esto?
python
python-2.7
http
http-headers
content-type
fuentesjr
fuente
fuente
urlparse
a mano, lo que se muestra mediante una respuesta de menor rango.httplib
se renombra ahttp.client
.requests
no se envía con Python de forma predeterminada.urllib2 se puede utilizar para realizar una solicitud HEAD. Esto es un poco más agradable que usar httplib, ya que urllib2 analiza la URL por usted en lugar de requerir que divida la URL en nombre de host y ruta.
Los encabezados están disponibles a través de response.info () como antes. Curiosamente, puede encontrar la URL a la que fue redirigido:
fuente
httplib.HTTPConnection
, que no maneja los redireccionamientos automáticamente.Forma obligatoria
Requests
:fuente
Creo que la biblioteca de solicitudes también debería mencionarse.
fuente
allow_redirects
solo puede deshabilitar las redirecciones POST / PUT / DELETE. Ejemplo: solicitud de encabezado sin redireccionamientoSólo:
Editar: Me acabo de dar cuenta de que hay httplib2: D
Texto del enlace
fuente
request
. (A saber, funcionará, pero es de mal estilo y si quisieras usarloself
, difícil)Para completar, tener una respuesta de Python3 equivalente a la respuesta aceptada usando httplib .
Básicamente es el mismo código, solo que la biblioteca ya no se llama httplib sino http.client
fuente
fuente
import
? +1 paraurlparse
- junto conhttplib
ellos brindan la comodidad deurllib2
, cuando se trata de URL en el lado de entrada.Como acotación al margen, cuando se usa httplib (al menos en 2.5.2), intentar leer la respuesta de una solicitud HEAD se bloqueará (en readline) y posteriormente fallará. Si no emite leer en la respuesta, no puede enviar otra solicitud en la conexión, deberá abrir una nueva. O acepte una gran demora entre solicitudes.
fuente
Descubrí que httplib es un poco más rápido que urllib2. Calculé el tiempo de dos programas, uno con httplib y el otro con urllib2, enviando solicitudes HEAD a 10,000 URL. El httplib uno fue más rápido en varios minutos. Las estadísticas totales de httplib fueron: real 6m21.334s usuario 0m2.124s sys 0m16.372s
Y las estadísticas totales de urllib2 fueron: real 9m1.380s usuario 0m16.666s sys 0m28.565s
¿Alguien más tiene comentarios sobre esto?
fuente
Y otro enfoque (similar a la respuesta de Pawel):
Solo para evitar tener métodos ilimitados a nivel de instancia.
fuente
Probablemente más fácil: use urllib o urllib2.
f.info () es un objeto similar a un diccionario, por lo que puede hacer 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
Los documentos señalan que httplib normalmente no se usa directamente.
fuente