我试图从需要NTLM登录的URL中提取信息。
我最初收到401错误,并且在进行一些调整后能够拉出页面,指出我输入了无效的凭据。
用户名和密码正确,但我无法通过无效的凭据页面。
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())
使用上面的方法,我有一个包含\的用户名,但在打印时名称中没有出现双反斜杠。我是否应该将其保留在print的名称将与txt文件中的用户名拼写完全相同的名称中加双反斜杠的位置?
该txt文件只是一个txt文档,仅包含:域\用户\名称密码。
用户名中间的第二个反斜杠将是用户名的一部分。
任何帮助,将不胜感激。
最佳答案
也许您没有使用raw string:
>>> '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'
这对我有用(在Python 2中,而不是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)