Pyllon urllib2.urlopen devolviendo el error 302 a pesar de que existe la página

Estoy utilizando la función urllib2.urlopen Python para leer el sitio web http://www.bad.org.uk/ pero sigo recibiendo un error 302, aunque cuando visito el sitio, se carga. Alguien tiene alguna idea de por qué?

 import socket headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' } socket.setdefaulttimeout(10) try: req = urllib2.Request('http://www.bad.org.uk/', None, headers) urllib2.urlopen(req) return True # URL Exist except ValueError, ex: print 'URL: %s not well formatted' % 'http://www.bad.org.uk/' return False # URL not well formatted except urllib2.HTTPError, ex: print 'The server couldn\'t fulfill the request for %s.' % 'http://www.bad.org.uk/' print 'Error code: ', ex.code return False except urllib2.URLError, ex: print 'We failed to reach a server for %s.' % 'http://www.bad.org.uk/' print 'Reason: ', ex.reason return False # URL don't seem to be alive 

Error impreso:

 The server couldn't fulfill the request for http://www.bad.org.uk//site/1/default.aspx. Error code: 302 

La página en http://www.bad.org.uk/ está rota cuando las cookies están deshabilitadas.

http://www.bad.org.uk/ devuelve:

 HTTP/1.1 302 Found Location: http://www.bad.org.uk/DesktopDefault.aspx Set-Cookie: Esperantus_Language_bad=en-GB; path=/ Set-Cookie: Esperantus_Language_rainbow=en-GB; path=/ Set-Cookie: PortalAlias=rainbow; path=/ Set-Cookie: refreshed=true; expires=Thu, 04-Nov-2010 16:21:23 GMT; path=/ Set-Cookie: .ASPXAUTH=; expires=Mon, 11-Oct-1999 23:00:00 GMT; path=/; HttpOnly Set-Cookie: portalroles=; expires=Mon, 11-Oct-1999 23:00:00 GMT; path=/ 

Si luego solicito http://www.bad.org.uk/DesktopDefault.aspx sin configurar estas cookies, proporciona otro 302 y un redireccionamiento a sí mismo.

urllib2 ignora las cookies y envía la nueva solicitud sin cookies, por lo que provoca un bucle de redireccionamiento en esa URL. Para manejar esto, necesita agregar un manejador de cookies:

 import urllib2 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) response = opener.open('http://www.bad.org.uk') print response.read() 

El código 302 es una redirección temporal, por lo que debe obtener el URI del campo Ubicación de la respuesta y solicitarlo.