2010-01-28 8 views
4

Je voudrais utiliser python-ntlm avec mechanize.Browser() J'ai HTTPNtlmAuthHandler travailler avec urllib2 et mechanize.urlopen() et essayé d'utiliser avec le navigateur(), mais il ne fonctionne paspersonnalisé gestionnaire auth avec mécaniser

Voici le code que je utilise pour urlopen

passman = mechanize.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, url, user, password) 
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) 

opener = mechanize.build_opener(auth_NTLM) 
mechanize.install_opener(opener) 
mechanize.urlopen(baseurl) 

retraçage comme l'a demandé

[email protected]:~$ python sitefoo.py 
now running mechanize.urlopen 
<addinfourl at 169181868 whose fp = <httplib.HTTPResponse instance at 0xa15858c>> 


now running mechanize.Browser then br.open 
Traceback (most recent call last): 
    File "sitescreaper.py", line 21, in <module> 
    br.open(baseurl) 
    File "/usr/lib/python2.6/dist-packages/mechanize/_mechanize.py", line 209, in open 
    return self._mech_open(url, data, timeout=timeout) 
    File "/usr/lib/python2.6/dist-packages/mechanize/_mechanize.py", line 261, in _mech_open 
    raise response 
mechanize._response.httperror_seek_wrapper: HTTP Error 401: Unauthorized 
+0

Vous avez une erreur? Si oui, veuillez ajouter la trace d'exception à votre question. – codeape

Répondre

1

Il existe peut-être de meilleures options, mais la seule façon de l'obtenir était de supprimer le gestionnaire HTTPRobotRulesProcessor qui empêchait en quelque sorte l'appel de HTTPNtlmAuthHandler.

Remarque: Le code suivant permet également de supprimer le ProxyHandler afin de contourner le serveur proxy - supprimez le cas échéant.

passman = mechanize.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, baseurl, user, password) 
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) 

browser = mechanize.Browser() 
browser.add_handler(auth_NTLM) 

handlersToKeep = [] 
for handler in browser.handlers: 
    if not isinstance(handler, (mechanize._auth.ProxyHandler, 
           mechanize._urllib2_support.HTTPRobotRulesProcessor)): 
     handlersToKeep.append(handler) 
browser.handlers = handlersToKeep 

browser.open(url)