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

上記の方法を使用して\を含むユーザー名を持っていますが、印刷時に名前に二重のバックスラッシュが表示されません。txtファイルにユーザー名のスペルがあるのとまったく同じように、printの名前に二重のバックスラッシュが含まれる場所に保管する必要がありますか?

txt ファイルは、 domain\user\name passwordのみを含む単なる txt ドキュメント です。

ユーザー名の真ん中にある 2 番目のバックスラッシュは、ユーザー名の一部になります。

どんな助けでも大歓迎です。

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'

これは私にとってはうまくいきます(3ではなくPython 2で):

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 に答える