L'Authentification Windows avec Python et urllib2
Je veux récupérer des données à partir d'un site web qui requiert mon nom d'utilisateur windows et le mot de passe.
Pour l'instant, j'ai:
opener = build_opener()
try:
page = opener.open("http://somepagewhichneedsmywindowsusernameandpassword/")
print page
except URLError:
print "Oh noes."
Est-ce pris en charge par urllib2? J'ai trouvé Python NTLM, mais qui m'oblige à mettre mon nom d'utilisateur et mot de passe. Est-il une manière de il suffit de saisir les informations d'authentification d'une certaine manière (par exemple, comme IE, Firefox, si j'ai changé le network.automatic-ntlm-auth.trusted-uris
paramètres).
Modifier après msander la réponse de
Donc, j'ai maintenant à ceci:
# Send a simple "message" over a socket - send the number of bytes first,
# then the string. Ditto for receive.
def _send_msg(s, m):
s.send(struct.pack("i", len(m)))
s.send(m)
def _get_msg(s):
size_data = s.recv(struct.calcsize("i"))
if not size_data:
return None
cb = struct.unpack("i", size_data)[0]
return s.recv(cb)
def sspi_client():
c = httplib.HTTPConnection("myserver")
c.connect()
# Do the auth dance.
ca = sspi.ClientAuth("NTLM", win32api.GetUserName())
data = None
while 1:
err, out_buf = ca.authorize(data) # error 400 triggered by this line
_send_msg(c.sock, out_buf[0].Buffer)
if err==0:
break
data = _get_msg(c.sock)
print "Auth dance complete - sending a few encryted messages"
# Assume out data is sensitive - encrypt the message.
for data in "Hello from the client".split():
blob, key = ca.encrypt(data)
_send_msg(c.sock, blob)
_send_msg(c.sock, key)
c.sock.close()
print "Client completed."
qui est assez bien arraché de socket_server.py
(voir ici). Mais j'obtiens une erreur de 400 bad request. Quelqu'un aurait-il d'autres idées?
Merci,
Dom
Peut-être anwsers ma question va vous aider.
par "saisir les informations d'authentification" entendez-vous, obtenez votre nom de domaine et mot de passe quelque part, et les utiliser dans votre script? J'aimerais savoir si il est possible aussi 🙂
Oui, c'est exactement ce que je veux dire.
par "saisir les informations d'authentification" entendez-vous, obtenez votre nom de domaine et mot de passe quelque part, et les utiliser dans votre script? J'aimerais savoir si il est possible aussi 🙂
Oui, c'est exactement ce que je veux dire.
OriginalL'auteur Dominic Rodger | 2009-05-26
Vous devez vous connecter pour publier un commentaire.
En supposant que vous écrivez votre code client sur Windows et il faut sans couture de l'authentification NTLM, alors vous devriez lire Mark Hammond est Accrochage dans NTLM poste de python-win32 liste de diffusion qui, pour l'essentiel des réponses à la même question. Cette points à la sspi code d'exemple fourni avec le Python Win32 extensions (qui sont inclus avec ActivePython et sinon, peut être téléchargé ici).
OriginalL'auteur msanders
Il y a plusieurs formes d'authentification que les sites web peuvent utiliser.
L'Authentification HTTP. Cette où le navigateur ouvre une fenêtre vous permettant d'entrer votre nom d'utilisateur et mot de passe. Il existe deux mécanismes: basic et digest. Il y a une "Autorisation" de l'en-Tête qui vient avec la page qui indique au navigateur (ou d'un programme à l'aide de urllib2) quoi faire.
Dans ce cas, vous devez configurer votre urlopener de fournir les réponses que l'en-tête d'autorisation doit voir. Vous aurez besoin pour construire un HTTPBasicAuthHandler ou HTTPDigestAuthHandler.
AuthHandlers besoin d'un PasswordManager. Ce gestionnaire de mot de passe pourrait avoir codé en dur nom d'utilisateur et le mot de passe (très fréquent) ou il pourrait être intelligent et votre mot de passe Windows de certaines API de Windows.
D'Authentification De L'Application. C'est là que l'application web vous dirige vers une page avec un formulaire que vous remplissez avec un nom d'utilisateur et mot de passe. Dans ce cas, votre programme en Python devez utiliser urllib2 de faire un POST (un demande avec des données) où les données le formulaire est correctement rempli. La réponse à ce post contient généralement un cookie, qui est ce que vous permet en outre d'accéder. Vous n'avez pas besoin de s'inquiéter beaucoup plus sur les cookies, urllib2 gère cela automatiquement.
Comment savez-vous que vous avez? Vous vider les en-têtes de la réponse. La réponse de urllib2.openurl comprend tous les en-têtes (en
page.info()
) ainsi que le contenu de la page.Lire L'Authentification HTTP en Python
Comment se connecter à un forum phpBB3 par le biais d'un script Python à l'aide urllib, urllib2 et ClientCookie?
Comment avez-vous accès authentifié Google App Engine service à partir d'un (non web) client python?
OriginalL'auteur S.Lott