2010-08-20 16 views
1

J'ai lu sur la capacité de Python urllib2 à ouvrir et lire des répertoires qui sont protégés par mot de passe, mais même après avoir regardé des exemples dans les docs, et ici sur StackOverflow, je ne peux pas obtenir mon script travailler.Python auth_handler ne fonctionne pas pour moi

import urllib2 
# Create an OpenerDirector with support for Basic HTTP Authentication... 
auth_handler = urllib2.HTTPBasicAuthHandler() 
auth_handler.add_password(realm=None, 
        uri='https://webfiles.duke.edu/', 
        user='someUserName', 
        passwd='thisIsntMyRealPassword') 
opener = urllib2.build_opener(auth_handler) 
# ...and install it globally so it can be used with urlopen. 
urllib2.install_opener(opener) 
socks = urllib2.urlopen('https://webfiles.duke.edu/?path=/afs/acpub/users/a') 
print socks.read() 
socks.close() 

Lorsque j'imprime le contenu, il imprime le contenu de l'écran de connexion que l'URL que je suis en train d'ouvrir vous redirigera vers. Quelqu'un sait pourquoi c'est?

Répondre

3

auth_handler est seulement pour l'authentification HTTP de base. Le site contient un formulaire HTML, vous devrez donc soumettre votre nom d'utilisateur/mot de passe en tant que données POST.

Je vous recommande d'utiliser le module mechanize qui simplifiera la connexion pour vous.

Exemple rapide:

import mechanize 

browser = mechanize.Browser() 

browser.open('https://webfiles.duke.edu/?path=/afs/acpub/users/a') 

browser.select_form(nr=0) 

browser.form['user'] = 'username' 
browser.form['pass'] = 'password' 
req = browser.submit() 

print req.read()