2010-12-03 27 views
3

Dans mon programme actuel, je suis accès à une page comme authentifié HTTP de base, ce qui fonctionne parfaitement:Utilisez mécaniser pour accéder à une page Web HTTP de base authentifiées

import urllib2 
url = 'http://test.localdomain/test.pl' 
realm = 'Test DB' 
username = 'foo' 
password = 'bar' 
auth_handler = urllib2.HTTPBasicAuthHandler() 
auth_handler.add_password(realm, uri , username, password) 
opener = urllib2.build_opener(auth_handler) 
data = opener.open(url).read() 

Maintenant, je veux cliquer sur un bouton sur cette page Après la connexion. J'ai trouvé la bibliothèque mécanisée pour Python qui peut faire des choses comme ça facilement. Malheureusement, je n'ai pas réussi à faire la même authentification de base que ci-dessus en utilisant mécaniser. Voici ce que j'ai essayé:

from mechanize import Browser 
url = 'http://test.localdomain/test.pl' 
realm = 'Test DB' 
username = 'foo' 
password = 'bar' 
browser = Browser() 
browser.add_password(url, username, password, realm) 
browser.open(url) 

Mais je reçois l'exception suivante:

HTTP Error refresh: The HTTP server returned a redirect error that would lead to an  
infinite loop. 
The last 30x error message was: 
OK 

Comment puis-je résoudre ce problème? Ou puis-je laisser mechanize utiliser le authhander déjà créé par urllib2 dans mon premier extrait?

+0

Essayez avec une URL différente? – user225312

+0

J'ai essayé de nombreuses variantes d'URL, aucune d'entre elles n'a fonctionné. avec urllib2, tout va bien. donc je me demande pourquoi la même URL ne fonctionne pas avec mécaniser. – ifischer

+0

Qu'est-ce que 'realm'? – user225312

Répondre

-3

L'erreur peut être ignorée. En l'attrapant, le programme peut continuer régulièrement.

-1

Mon script lançait la même erreur. Voici comment je l'ai réparé.

pour soumettre votre formulaire
browser.add_password(url, username, password, realm) 
urllib2.urlopen(url) 

Vous devrez peut-être utiliser browser.click() s'il y a un et/ou créer une variable et ouverte « résultats site » avec urllib2.