2012-11-02 17 views
5

Sto cercando di estrarre informazioni da un URL che richiede l'accesso NTLM.Accesso NTLM Python

Ho ricevuto originariamente l'errore 401 e dopo alcune modifiche è stato possibile estrarre la pagina dichiarando che ho inserito credenziali non valide.

Il nome utente e la password sono corretti ma non riesco a superare la pagina delle credenziali non valide.

Lgn2.py:

import urllib2 
import HTTPNtlmAuthHandler 

login = open('c:/temp/login.txt') 
open = login.read() 
to = open.split() 
user = str(to[0]) 
password = str(to[1]) 

url = "http://INSERT URL HERE.com/" 
passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, url, user, password) 
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) 


opener = urllib2.build_opener(auth_NTLM) 
urllib2.install_opener(opener) 


response = urllib2.urlopen(url) 
print(response.read()) 

ho un nome utente compreso un \ utilizzando il metodo di cui sopra non ottengo una doppia barra rovesciata nel nome durante la stampa. Devo tenerlo a dove print avrà il doppio backslash nel nome come indicato esattamente come il file txt ha il nome utente scritto?

Il file txt è solo un documento txt con solo: dominio \ utente \ nome password.

Il secondo backslash nel mezzo del nome utente sarebbe parte del nome utente.

Qualsiasi aiuto sarebbe apprezzato.

+0

http://code.google.com/p/python-ntlm/ ha un nome utente che si presenta come 'dominio \ utente'. Il tuo nome utente ha un dominio in esso? –

+0

sì senza il dominio restituirà un 401 –

+1

Che tipo di meccanismo di autenticazione utilizza il tuo sito web? Se non è impostato per consentire l'autenticazione di base, devi utilizzare un digest: consulta l'esempio esteso su http://code.google.com/p/python-ntlm/ – Seth

risposta

2

Forse non usavano un raw string:

A meno che un 'r' o prefisso 'R' è presente, le sequenze di escape nelle stringhe vengono interpretati in base alle leggi simili a quelle utilizzate da Standard C .

>>> 'domain\user' 
    File "<stdin>", line 1 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 6-7: truncated \uXXXX escape 
>>> r'domain\user' 
'domain\\user' 

Questo funziona per me (in Python 2, non 3):

from ntlm import HTTPNtlmAuthHandler 
import urllib2 

user = r'domain\user' 
password = "passphrase" 
passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, "http://projects/", user, password) 
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) 
opener = urllib2.build_opener(auth_NTLM) 
urllib2.install_opener(opener) 

url = "http://projects/_vti_bin/owssvr.dll?Cmd=Display&List=etc" 
response = urllib2.urlopen(url) 
headers = response.info() 
print("headers: {}".format(headers)) 
body = response.read() 
print("response: " + body) 
+0

Il tuo post è molto utile, volevo anche aggiungere intestazione di autenticazione in ntlm che il nome della variabile è Userauth, per favore aiutatemi –

+0

Grazie per questo! – bernie

6

La nostra azienda ha un proxy e utilizza NTLM. Per connettersi senza dover inserire le credenziali nello script che ho usato:

import win32com.client 

url = 'https://...' 

h = win32com.client.Dispatch('WinHTTP.WinHTTPRequest.5.1') 
h.SetAutoLogonPolicy(0) 
h.Open('GET', url, False) 
h.Send() 
result = h.responseText 
result 
+0

Dove usi winreg in questo? – Garan

+0

Forse ho usato winreg per qualcos'altro nel mio codice. Non riesco a ricordare. Non penso che sia necessario per il funzionamento di sopra. Fammi sapere come te la cavi. – toasteez

+0

Bene, ha aperto pagine con successo ... Ma poi si scopre che abbiamo bisogno di eseguire il nostro programma su Linux e da allora non ho più controllato questo. – Garan

Problemi correlati