¿Cómo se envía una solicitud HTTP HEAD en Python 2?
Lo que intento 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 descubrir cómo enviar una solicitud HEAD para poder leer el tipo MIME sin tener que descargar el contenido. ¿Alguien sabe de una manera fácil de hacer esto?
urllib2 se puede utilizar para realizar una solicitud HEAD. Esto es un poco mejor que usar httplib ya que urllib2 analiza la URL por usted en lugar de requerir que la divida en nombre de host y ruta.
>>> import urllib2
>>> class HeadRequest(urllib2.Request):
... def get_method(self):
... return "HEAD"
...
>>> response = urllib2.urlopen(HeadRequest("http://google.com/index.html"))
Los encabezados están disponibles a través de Response.info() como antes. Curiosamente, puedes encontrar la URL a la que fuiste redirigido:
>>> print response.geturl()
http://www.google.com.au/index.html
editar : Esta respuesta funciona, pero hoy en día solo debes usar la biblioteca de solicitudes como se menciona en otras respuestas a continuación.
Utilice httplib .
>>> import httplib
>>> conn = httplib.HTTPConnection("www.google.com")
>>> conn.request("HEAD", "/index.html")
>>> res = conn.getresponse()
>>> print res.status, res.reason
200 OK
>>> print res.getheaders()
[('content-length', '0'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Sat, 20 Sep 2008 06:43:36 GMT'), ('content-type', 'text/html; charset=ISO-8859-1')]
También hay una opción getheader(name)
para obtener un encabezado específico.
Manera obligatoria Requests
:
import requests
resp = requests.head("http://www.google.com")
print resp.status_code, resp.text, resp.headers
Creo que también debería mencionarse la biblioteca de Solicitudes .