urllib2 Problema de solicitud

estoy tratando de abrir una página usando urllib2

 req = urllib2.Request("http://1033kissfm.com",
        headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0'})
 response = urllib2.urlopen(req)
 rstPage = response.read()

y la respuesta es

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.0.3</center>
</body>
</html>

pero cuando abro esta url en el navegador funciona bien, esta es la url

http://1033kissfm.com

en el navegador se redirige a

http://www.1033kissfm.com/pages/main

.

preguntado el 29 de julio de 12 a las 11:07

Este es un problema específico del sitio web, no un problema de Python. Es probable que el sitio busque encabezados u otra información como prueba de que está utilizando un navegador web, no un script. -

Como tal, su pregunta está demasiado localizada para Stack Overflow; una respuesta solo lo ayudará a usted, a nadie más, ya que no se puede generalizar. -

es un problema de python si es una mala solicitud, ¿por qué se abre en el navegador web? -

Tendría el mismo problema con Perl, C o Java. Es un problema con el sitio web, no con la biblioteca python urllib2. -

Estoy seguro de que no es un problema de la biblioteca ni estoy aquí para probarlo, pero estoy seguro de que no sé algo que pueda hacer que se ejecute a través de la biblioteca de Python.

1 Respuestas

Resolví el problema ya que creo que la biblioteca no brinda ningún soporte para manejar la redirección. este código ayudará a encontrar redireccionamientos para obtener la respuesta adecuada

def get_hops(url):
    redirect_re = re.compile('<meta[^>]*?url=(.*?)["\']', re.IGNORECASE)
    hops = []
    while url:
            if url not in hops:
                hops.insert(0, url)
            response = urllib2.urlopen(url)
            if response.geturl() != url:
                hops.insert(0, response.geturl())
                # check for redirect meta tag
            match = redirect_re.search(response.read())
            if match:
                url = urlparse.urljoin(url, match.groups()[0].strip())
            else:
                url = None
    return hops

Respondido 29 Jul 12, 13:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.