3

假设我有以下脚本:

import requests

username = 'myUser'
password = 'myPswd'
url = 'https://NTLMwebsite/base.com'
nextPage = 'https://NTLMwebsite/base/next.com'

r = requests.get(url, auth=HttpNtlmAuth(username,password))
#Cool, but how do I access nextPage?

通过 NTLM 后如何请求另一个页面?验证。如果我只是通过: 发出另一个请求requests.get(nextPage, auth=HttpNtlmAuth(username,password)),那么它会将我重定向回基本网站,因为它会创建一个 NEW 请求并且必须重新验证 NTLM 身份验证。

一旦您绕过 NTLM,有谁知道如何关注链接?

4

1 回答 1

3

根据requests_ntlm 包的源代码,“NTLM 验证连接,而不是单个请求” 。这意味着您要么必须重用相同的请求,要么必须对您发出的每个请求进行身份验证。

您应该能够使用 requests 的Session 对象来获得可以重用的持久连接,并且更容易设置身份验证。以下代码演示了正在发生的事情,并且应该为您提供一些构建基础:

import requests
from requests_ntlm import HttpNtlmAuth

username = 'myUser'
password = 'myPswd'
url = 'https://NTLMwebsite/base.com'
nextPage = 'https://NTLMwebsite/base/next.com'

s = requests.Session()

s.auth = HttpNtlmAuth(username, password)

r1 = s.get(url)
r2 = s.get(nextPage)
print 'r1', r1
print 'r2', r2
print 'Session using same connection:', r1.connection == r2.connection

r1 = requests.get(url, auth=HTTPBasicAuth(username, password))
r2 = requests.get(nextPage, auth=HTTPBasicAuth(username, password))
print 'r1', r1
print 'r2', r2
print 'Non Session using same connection:', r1.connection == r2.connection
于 2013-09-17T20:29:59.483 回答