我正在尝试使用urllib2使用个人数字证书打开网页。
实际上,通过命令行模式,使用“curl -k”可以打开此资源。
所以我的问题是:
1)是否可以使用urllib2绕过使用个人数字证书打开此网页?
2)如果无法使用选项(1),如何使用urllib2和“个人数字证书”访问此资源。
P.S。 我试图使用以访问此资源的代码如下:
class HTTPSClientAuthHandler(urllib2.HTTPSHandler):
def init(self, key, cert):
urllib2.HTTPSHandler.init(self)
self.key = key
self.cert = cert
def https_open(self, req):
return self.do_open(self.getConnection, req)
def getConnection(self, host, timeout=300):
return httplib.HTTPSConnection(host, key_file=self.key, cert_file=self.cert)
opener = urllib2.build_opener(HTTPSClientAuthHandler('/Users/antonio/.globus/userkey.pem','/Users/antonio/.globus/usercert.pem') )
response = opener.open("https://........")
print response.read()
我得到的错误是:
def https_open(self, req):
return self.do_open(self.getConnection, req)
def getConnection(self, host, timeout=300):
return httplib.HTTPSConnection(host, key_file=self.key, cert_file=self.cert)
答案 0 :(得分:1)
最后我解决了这个问题。
我绕过使用个人数字证书确实访问了https服务 只是这样:
txdata = None txheaders = { 'Accept': 'text/html' } req = urllib2.Request(url, txdata, txheaders)
标题'Accept'的所有想法:'text / html'允许连接到没有证书的SSL站点?
可能取决于服务器设置。
答案 1 :(得分:0)
我不熟悉pycurl,但这里有一些可能有用的链接:
problem sending an HTTPGET with PyCurl (特别注意使用--libcurl example.c获取libcurl实现的建议)
答案 2 :(得分:0)
除了一个例外,你对我有用。 init必须具有前后的双__,因为它是一个初始化类的特殊函数。这在每个班级中始终是相同的功能:
类HTTPSClientAuthHandler(urllib2.HTTPSHandler): def _ init _ (self,key,cert): urllib2.HTTPSHandler。的 _ 初始化 _ 强>(个体) self.key = key self.cert = cert