libreria from espaƱol python python-2.7 urllib2 head

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()