使用pyCurl通过NTLM获取页面

1 投票
1 回答
2605 浏览
提问于 2025-04-18 11:36

我正在尝试从一个托管在Windows IIS服务器上的REST网络服务获取数据;这个服务器使用HTTPS,并且需要身份验证。

下面这个Curl命令运行得很好:

 curl -k --ntlm --user bob https://mywebservice

但是当我想把它转换成相应的pycurl,以便在程序中使用时,我一直在为身份验证的问题苦恼。

到目前为止,我写了:

import pycurl

name='bob'
pwd='pwd1'
url="https://mywebservice"

curl = pycurl.Curl()
curl.setopt(pycurl.URL, url)
curl.setopt(pycurl.SSL_VERIFYPEER, 0)

#not sure about this
#curl.setopt(pycurl.PROXYAUTH, pycurl.HTTPAUTH_NTLM)
#curl.setopt(pycurl.PROXYUSERPWD,"{}:{}".format(name, pwd))

curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_NTLM)
curl.setopt(pycurl.USERNAME, name)
curl.setopt(pycurl.USERPWD, pwd)


curl.perform()
curl.close()

不过,使用以下代码以及它的不同变体,我总是收到:

401 - Unauthorized: Access is denied due to invalid credentials

来自IIS的错误信息。

1 个回答

4

问题在于我使用了 pycurl.USERNAMEpycurl.USERPWD

我需要查看源代码,结果发现了 pycurl.USERPWD,这样就能正常工作了:

import pycurl

name='bob'
pwd='pwd1'
url="https://mywebservice"

curl = pycurl.Curl()
curl.setopt(pycurl.URL, url)
curl.setopt(pycurl.SSL_VERIFYPEER, 0)

curl.setopt(pycurl.HTTPAUTH, pycurl.HTTPAUTH_NTLM)
curl.setopt(pycurl.USERPWD, "{}:{}".format(name, pwd))

curl.perform()
curl.close()

撰写回答