python关于SSL的认证--pycurl模块使用
今天在做微信支付退款接口的时候,因为需要使用到双向证书的认证,所以一开始是没有头绪的,后来在网上找到了相类似的教程,发现了pycurl模块,才成功实现了证书认证,教程链接:http://blog.csdn.net/yueguanghaidao/article/details/41451711/。
然后因为是直接copy下来的代码,所以自己后面花了点时间来熟悉一下这个模块,因为我是想达到使用证书post的目的, 所以就编写了一个函数
def postXmlSSL(self, xml, url, second=30, cert=True, post=True): # 使用证书进行post curl = pycurl.Curl() #创建pcurl对象 curl.setopt(pycurl.SSL_VERIFYHOST, False) #对于某些采用HTTPS的网站,有时会因为证书验证失败而无法正常访问,pycurl模块提供了取消验证过程的功能。 curl.setopt(pycurl.SSL_VERIFYPEER, False) curl.setopt(pycurl.HEADER, False) #设置不输出header curl.setopt(pycurl.URL, url) #设置url curl.setopt(pycurl.TIMEOUT, second) #连接超时时间 if cert: #如果是存在证书,就会有证书和密钥,python使用的是两个pem证书,然后定义类型,输入证书路径就ok了。 curl.setopt(pycurl.SSLKEYTYPE, "PEM") curl.setopt(pycurl.SSLKEY, "###") curl.setopt(pycurl.SSLCERTTYPE, "PEM") curl.setopt(pycurl.SSLCERT, "###") if post: #使用的是post方法,然后post内容是xml格式的。 curl.setopt(pycurl.POST, True) curl.setopt(pycurl.POSTFIELDS, xml) buff = BytesIO() #python3使用的是io模块的字节流,而不是教程中的StingIO,那个是python2使用的 curl.setopt(pycurl.WRITEFUNCTION, buff.write) #pycurl模块不具备存储的功能,所以将数据写入字节流当中 curl.perform() #执行操作 return buff.getvalue().decode("utf-8") #返回字节流中的数据,返回之前要解码,我是从微信接口获取的数据,所以是用utf-8来解码。
搞完这些发现了一个专门讲pycurl模块的文档,哔了狗,要是早点发现就好了。。。。贴出文档链接:https://mp.weixin.qq.com/s?__biz=MzIwMDYxMjgyMg==&mid=2650361142&idx=1&sn=b11ad13a718b8c91280eab1ffbe62b98