usar sirve que puede programas programar programacion payton para lenguaje introduccion hacer descargar con como python http redirect

puede - python para que sirve



¿Hay alguna manera fácil de solicitar una URL en python y NO seguir las redirecciones? (7)

Mirando la fuente de urllib2 parece que la forma más fácil de hacerlo sería subclase HTTPRedirectHandler y luego usar build_opener para reemplazar el HTTPRedirectHandler predeterminado, pero esto parece mucho trabajo (relativamente complicado) para hacer lo que parece que debería ser bastante simple.


Aquí está la forma de las Requests :

import requests r = requests.get(''http://github.com'', allow_redirects=False) print(r.status_code, r.headers[''Location''])


El camino más corto sin embargo es

class NoRedirect(urllib2.HTTPRedirectHandler): def redirect_request(self, req, fp, code, msg, hdrs, newurl): pass noredir_opener = urllib2.build_opener(NoRedirect())


Este es un controlador urllib2 que no seguirá los redireccionamientos:

class NoRedirectHandler(urllib2.HTTPRedirectHandler): def http_error_302(self, req, fp, code, msg, headers): infourl = urllib.addinfourl(fp, headers, req.get_full_url()) infourl.status = code infourl.code = code return infourl http_error_300 = http_error_302 http_error_301 = http_error_302 http_error_303 = http_error_302 http_error_307 = http_error_302 opener = urllib2.build_opener(NoRedirectHandler()) urllib2.install_opener(opener)


La palabra clave redirections en el método de solicitud httplib2 es una httplib2 falsa. En lugar de devolver la primera solicitud, se generará una excepción RedirectLimit si recibe un código de estado de redirección. Para devolver la respuesta inicial, debe establecer follow_redirects en False en el objeto Http :

import httplib2 h = httplib2.Http() h.follow_redirects = False (response, body) = h.request("http://example.com")


Yo segundo el puntero de Olt para bucear en Python . Aquí hay una implementación que usa los manejadores de redirección urllib2, ¿más trabajo de lo que debería ser? Tal vez, encogerse de hombros.

import sys import urllib2 class RedirectHandler(urllib2.HTTPRedirectHandler): def http_error_301(self, req, fp, code, msg, headers): result = urllib2.HTTPRedirectHandler.http_error_301( self, req, fp, code, msg, headers) result.status = code raise Exception("Permanent Redirect: %s" % 301) def http_error_302(self, req, fp, code, msg, headers): result = urllib2.HTTPRedirectHandler.http_error_302( self, req, fp, code, msg, headers) result.status = code raise Exception("Temporary Redirect: %s" % 302) def main(script_name, url): opener = urllib2.build_opener(RedirectHandler) urllib2.install_opener(opener) print urllib2.urlopen(url).read() if __name__ == "__main__": main(*sys.argv)


supongo que esto ayudaría

from httplib2 import Http def get_html(uri,num_redirections=0): # put it as 0 for not to follow redirects conn = Http() return conn.request(uri,redirections=num_redirections)


Dive Into Python tiene un buen capítulo sobre el manejo de redirecciones con urllib2. Otra solución es httplib .

>>> import httplib >>> conn = httplib.HTTPConnection("www.bogosoft.com") >>> conn.request("GET", "") >>> r1 = conn.getresponse() >>> print r1.status, r1.reason 301 Moved Permanently >>> print r1.getheader(''Location'') http://www.bogosoft.com/new/location