本篇文章给大家分享的是有关怎样用原生的请的urllib2 + httplib的求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
环境python2.7.5
# Https服务器生成证书https://www.cnblogs.com/loleina/p/8418111.html
#, HTTPSConnection
key ,,,# https服务器使用的关键
ca_certs #, https服务器使用的ca
cert ,,,#在浏览器下载的证书,窗户下载后linux可以使用
# # # https。py
进口urllib2 httplib, ssl套接字
DEFAULT_HTTP_TIMEOUT=10 #秒
# # http://stackoverflow.com/questions/1875052/using-paired-certificates-with-urllib2 http://code.activestate.com/recipes/577548-https-httplib-client-connection-with-certificate-v/
类HTTPSClientAuthHandler (urllib2.HTTPSHandler):
,,& # 39;& # 39;& # 39;
,,允许发送客户端证书的HTTPS连接。
,,这个版本也验证了同行(服务器)证书,嗯…
,,WTF SSL的如果你不T认证人你;再保险说话! ? ? !
,,& # 39;& # 39;& # 39;
,,def __init__(自我,关键=None, cert=None, ca_certs=None, ssl_version=没有密码=None):
,,,,urllib2.HTTPSHandler.__init__(自我)
,,,,自我。键=键
,,,,自我。cert=cert
,,,,自我。ca_certs=ca_certs
,,,,自我。ssl_version=ssl_version
,,,,自我。密码=密码
,,def https_open(自我,点播):
,,,,#而不是通过连接类的引用,我们通过在
,,,,#一个函数的引用,对于所有意图和目的,
,,,,#将像一个构造函数
,,,,返回self.do_open(自我。get_connection点播)
,,def get_connection(自我、主机超时=DEFAULT_HTTP_TIMEOUT):
,,,,返回HTTPSConnection(主机,
,,,,,,,,key_file=self.key,
,,,,,,,,cert_file=self.cert
,,,,,,,,=超时,超时
,,,,,,,,密码=self.ciphers
,,,,,,,,ca_certs=自我。ca_certs)
类HTTPSConnection (httplib.HTTPSConnection):
,,& # 39;& # 39;& # 39;
,,覆盖允许对等证书验证,配置
,,SSL/TLS版本和密码选择只看到:
,,http://hg.python.org/cpython/file/c1c45755397b/Lib/httplib.py l1144
,,和“ssl.wrap_socket ()
,,& # 39;& # 39;& # 39;
,,def __init__(自我、主机* * kwargs):
,,,,自我。密码=kwargs.pop(& # 39;密码# 39;None)
,,,,自我。ca_certs=kwargs.pop (& # 39; ca_certs& # 39; None)
,,,,自我。ssl_version=kwargs.pop (& # 39; ssl_version& # 39;, ssl.PROTOCOL_SSLv23)
,,,,httplib.HTTPSConnection.__init__(自我、主机* * kwargs)
,,def连接(自我):
,,,,袜子=套接字。create_connection(自我。主机,self.port),自我。超时)
,,,,如果self._tunnel_host:
,,,,,,自我。袜子=袜子
,,,,,,self._tunnel ()
,,,,自我。袜子=ssl。wrap_socket(袜子,
,,,,,,,,密钥文件=self.key_file,
,,,,,,,,certfile=self.cert_file
,,,,,,,,ca_certs=self.ca_certs
,,,,,,,,cert_reqs=ssl。CERT_REQUIRED如果自我。其他ca_certs ssl。CERT_NONE)
# # #测试。进口urllib2 py
进口urllib
进口https
进口ssl
进口json
client_cert_key=癳tcd-client-key.pem"#文件路径
client_cert_pem=癳tcd-client.pem",,,#文件path
ca_certs=癳tcd-ca.pem",,,,,,,,#文件路径
处理程序=[]
处理程序。追加(https.HTTPSClientAuthHandler (
大敌;;,关键=client_cert_key
,,cert=client_cert_pem
,,ca_certs=ca_certs
,,ssl_version=ssl.PROTOCOL_SSLv23
,,密码=& # 39;TLS_RSA_WITH_AES_256_CBC_SHA& # 39;)null