from - urllib.urlopen python 3
RealizaciĆ³n de solicitud HTTP HEAD con urllib2 desde Python 2 (4)
El problema radica en su clase HeadRequest, que hereda de urllib2.Request. De acuerdo con la firma doc, urllib2.Request.__init__
es
__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)
así que debes pasarle un argumento de url. En su segundo intento, simplemente no usa HeadRequest, es por eso que funciona.
Estoy tratando de hacer una solicitud HEAD de una página usando Python 2.
estoy intentando
import misc_urllib2
.....
opender = urllib2.build_opener([misc_urllib2.MyHTTPRedirectHandler(), misc_urllib2.HeadRequest()])
con misc_urllib2.py
contiene
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def __init__ (self):
self.redirects = []
def http_error_301(self, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(
self, req, fp, code, msg, headers)
result.redirect_code = code
return result
http_error_302 = http_error_303 = http_error_307 = http_error_301
Pero estoy recibiendo
TypeError: __init__() takes at least 2 arguments (1 given)
Si solo hago
opender = urllib2.build_opener(misc_urllib2.MyHTTPRedirectHandler())
entonces funciona bien
Esto funciona bien:
import urllib2
request = urllib2.Request(''http://localhost:8080'')
request.get_method = lambda : ''HEAD''
response = urllib2.urlopen(request)
print response.info()
Probado con HTTPd rápido y sucio pirateado en python:
Server: BaseHTTP/0.3 Python/2.6.6
Date: Sun, 12 Dec 2010 11:52:33 GMT
Content-type: text/html
X-REQUEST_METHOD: HEAD
He agregado un campo de encabezado personalizado X-REQUEST_METHOD para mostrar que funciona :)
Aquí está el registro HTTPd:
Sun Dec 12 12:52:28 2010 Server Starts - localhost:8080
localhost.localdomain - - [12/Dec/2010 12:52:33] "HEAD / HTTP/1.1" 200 -
Editar: también hay httplib2
import httplib2
h = httplib2.Http()
resp = h.request("http://www.google.com", ''HEAD'')
Intenta con 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'')]
Consulte ¿Cómo se envía una solicitud HEAD HTTP en Python 2?
no HeadRequest
agregar HeadRequest
a build_opener
o add_handler
debería llamarse así
opener = urllib2.build_opener(MyHTTPRedirectHandler)
response = opener.open(HeadRequest(url))
print response.getheaders()