请的怎样用原生的urllib2 + httplib的求Https

介绍

本篇文章给大家分享的是有关怎样用原生的请的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

请的怎样用原生的urllib2 + httplib的求Https