6

我正在尝试从需要 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 文档,只有: domain\user\name password

用户名中间的第二个反斜杠将是用户名的一部分。

任何帮助,将不胜感激。

4

2 回答 2

8

我们公司有代理并使用 NTLM。要连接而不必在我使用的脚本中放置凭据:

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
于 2016-02-23T12:12:33.330 回答
3

也许您没有使用原始字符串

除非存在 'r' 或 'R' 前缀,否则字符串中的转义序列将根据与标准 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'

这对我有用(在 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)
于 2013-11-19T09:30:49.830 回答