今天在做微信支付退款接口的时候,因为需要使用到双向证书的认证,所以一开始是没有头绪的,后来在网上找到了相类似的教程,发现了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

最新文章

  1. hibernate映射文件
  2. Python面试题 —— 计算列表中出现最多次的字符
  3. 【noiOJ】p8208
  4. Count Color(线段树+位运算 POJ2777)
  5. Java Script 练习题
  6. hdu4935 Prime Tree(2014多校联合第七场)
  7. 制作透明色:《CSS3 RGBA》与Opacity样式用法
  8. [Programming Entity Framework] 第3章 查询实体数据模型(EDM)(一)
  9. Vim 中使用cscope
  10. 虚幻4以及DX12将允许开发者利用Xbox One的更多性能(转)
  11. ASP.NET MVC 下 引用阿里巴巴和IconFont字体路径404问题
  12. Cocos2d-x CCActionInterval
  13. -_-#【Backbone】Collection
  14. ios开发 block语句块
  15. POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)
  16. 阻止微信浏览器/QQ浏览器长按弹框“在浏览器打开”
  17. 重拾Python(4):Pandas之DataFrame对象的使用
  18. 电子产品使用感受之——为什么我把Apple Watch S2 升级到了 S4?
  19. 网页异步加载之AJAX理解
  20. Angular4-配置

热门文章

  1. 『009』Python
  2. kettle教程---kettle作业调度,根据更新时间增量更新
  3. vue项目关闭eslint校验
  4. c# 第26节 Main方法
  5. 深度学习框架gpu安装方法
  6. 17. 抽象建模能力&发散思维能力&综合(5)
  7. C#获取CPU和内存使用率
  8. 腾讯微视:向前一步是悲壮,向后一步是绝望zz
  9. LeetCode 20:有效的括号 Valid Parentheses
  10. 《Spring + MyBatis 企业应用实战》书评