2014-06-30 29 views
1

我想从Windows IIS服务器上托管的REST Web服务检索数据;该服务器使用HTTPS并需要验证。使用NTLM与pyCurl获取页面

下面的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回来。

回答

3

问题是我在使用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()