使用urllib2使用个人数字证书打开URL

时间:2011-04-08 21:27:29

标签: python https

我正在尝试使用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)

3 个答案:

答案 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实现的建议)

http://code.google.com/p/friendlycurl/

http://www.phpfreaks.com/forums/index.php?topic=270222.0

答案 2 :(得分:0)

除了一个例外,你对我有用。 init必须具有前后的双__,因为它是一个初始化类的特殊函数。这在每个班级中始终是相同的功能:

类HTTPSClientAuthHandler(urllib2.HTTPSHandler):     def _ init _ (self,key,cert):         urllib2.HTTPSHandler。的 _ 初始化 _ (个体)         self.key = key         self.cert = cert