2012-11-02 14 views
5

giriş. bazı ince ayarlar Ben girdi geçersiz kimlik bilgilerine sahip olduğunu belirten sayfasını çekin mümkün olmuştur sonraPython NTLM ben NTLM giriş gerektiren bir url bilgi çekmesi çalışıyorum

Ben 401 hata aldı ve originaly.

kullanıcı adı ve şifre

doğru henüz geçersiz kimlik bilgileri sayfasında geçemiyorum.

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()) 

Ben yazdırır zaman adına bir çift ters eğik çizgi alamadım yukarıdaki yöntemi kullanarak bir \ içeren bir kullanıcı adı vardır. Txt dosyasının kullanıcı adı hecelenmiş olduğu gibi, tam tersi olarak yazılan adın çift ters eğik çizgiye sahip olması durumunda onu tutmalı mıyım?

Txt dosyası yalnızca bir txt belgesine sahip: etki alanı \ kullanıcı \ parola.

kullanıcı adı ortasında ikinci eğik çizgi kullanıcı adının bir parçası olacaktır.

Herhangi bir yardım

mutluluk duyacağız.

+0

http://code.google.com/p/python-ntlm/ 'DOMAIN \ User' gibi görünen bir kullanıcı adı vardır. Kullanıcı adınızda bir alan adı var mı? –

+0

evet etki alanı olmadan bir 401 dönecektir –

+1

Web siteniz ne tür bir auth mekanizması kullanıyor? Ben de eklemek istedim http://code.google.com/p/python-ntlm/ – Seth

cevap

2

Belki raw string kullanmak vermedi: Standart Cı tarafından kullanılanlara benzer kurallara göre dizeleri dizilerin kaçış, bir 'r' ya da 'R' öneki mevcut olduğu sürece

yorumlanır .

>>> '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' 
Bu benim için çalışıyor

(değil 3 Python 2 cinsinden):

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

Kişisel Mesaj çok yararlıdır üzerinde genişletilmiş örneğe bakın - temel kimlik doğrulama izin verecek şekilde ayarlanmış değilse, o zaman bir özetini kullanmak zorunda ntlm içinde kimlik doğrulama başlığı, değişken adı Userauth, lütfen bana yardım edin –

+0

Bunun için teşekkürler! – bernie

6

Firmamız proxy vardır ve NTLM kullanır. Kullandığım senaryodaki kimlik bilgilerini yerleştirmek zorunda kalmadan bağlanmak için:

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

Bu konuda winreg'i nerden kullanıyorsunuz? – Garan

+0

Kodumda başka bir şey için Winreg kullanmış olabilirim. Hatırlayamıyorum. Yukarıdakilerin çalışması için gerekli olduğunu düşünmüyorum. Bununla nasıl baş edeceğini bana bildirin. – toasteez

+0

Eh, başarılı bir şekilde sayfalar açıldı ... Ama sonra programımızı Linux üzerinde çalıştırmamız gerektiği ve bunu daha önce kontrol etmediğimizi ortaya koyuyor. – Garan

İlgili konular