使用pyCurl通过NTLM获取页面
我正在尝试从一个托管在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.USERNAME
和 pycurl.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()