2010-11-04 4 views
3

J'utilise la fonction Python urllib2.urlopen pour lire le site Web http://www.bad.org.uk/ mais je continue à recevoir une erreur 302 même si quand je visite le site il se charge bien. Quelqu'un a une idée de pourquoi?Python urllib2.urlopen retournant 302 erreur même si la page existe

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 

Erreur d'impression:

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

Répondre

18

La page au http://www.bad.org.uk/ est cassée lorsque les cookies sont désactivés.

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

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 je demande alors http://www.bad.org.uk/DesktopDefault.aspxsans mettre ces cookies, il donne une autre 302 et une redirection vers lui-même. En ignorant les cookies et en envoyant la nouvelle requête sans cookies, elle provoque une boucle de redirection vers cette URL. Pour gérer cela, vous devez ajouter un gestionnaire de cookies:

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

code 302 est une redirection temporaire, de sorte que vous devriez obtenir l'URI du champ Emplacement de la réponse et demander.

+0

Comment faire? Désolé je suis assez nouveau à Python et n'ai pas utilisé l'urllib2 avant – John

+0

@John - C'est une question différente! –

+2

Les 302s sont automatiquement gérés par urllib2 par défaut. –

Questions connexes