urllib.urlopen Python () llamada no funciona con una URL que acepta un navegador
Pregunta
Si señalo Firefox en http://bitbucket.org/tortoisehg/stable/ wiki / Inicio / ReleaseNotes , llego a una página de HTML. Pero si intento esto en Python:
import urllib site = 'http://bitbucket.org/tortoisehg/stable/wiki/Home/ReleaseNotes' req = urllib.urlopen(site) text = req.read()
Me sale el siguiente:
500 Error interno del servidor El servidor encontró un error interno o mala y no pudo completar su solicitud.
¿Qué estoy haciendo mal?
Solución
No estás haciendo nada malo, bitbucket hace algo de detección de agente de usuario (para detectar clientes mercuriales, por ejemplo). Sólo cambiar el agente de usuario lo fija (si no tiene urllib
como una subcadena).
Usted debe llenar un problema con respecto a esto: http://bitbucket.org/jespern/ bitbucket / temas / nueva /
Otros consejos
Lo estás haciendo nada malo, en la superficie, y, como la página de error dice que debe ponerse en contacto con los administradores del sitio, porque son los que tienen los registros del servidor que puede explicar lo que está pasando. Afortunadamente, administradores del sitio de Bitbucket son un grupo muy amigable!
Sin duda hay algo de cabecera o combinación de cabeceras que el navegador configurado de una manera, urllib establece otro camino, y un error en el servidor se hicieron cosquillas en el último caso. Es posible que desee ver exactamente lo que los encabezados se envían, por ejemplo, con Firebug en Firefox, y se reproducen los hasta aislar exactamente el fallo del servidor; más probable es que va a ser el agente de usuario o algún "aceptar" cabecera -ish que está cosquillas en ese error.
No creo que estés haciendo nada malo - parece que este servidor estaba justo al final? La secuencia de comandos funcionó bien para mí ( 'texto' contiene los mismos datos que la que se muestra en el navegador).