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

python关于SSL的认证--pycurl模块使用的更多相关文章

  1. python pycurl模块

    一.pycurl概述 PycURl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,在PyCURL的主页上介 ...

  2. Python 的PyCurl模块使用

    PycURl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,PycURL 是一个非常快速(参考多并发操作) ...

  3. 6.python探测Web服务质量方法之pycurl模块

    才开始学习的时候有点忽略了这个模块,觉得既然Python3提供了requests库,为什么多此一举学习这个模块.后来才发现pycurl在探测Web服务器的时候的强大. pycurl是一个用c语言写的l ...

  4. 转python版本的curl工具pycurl学习

    一 pycurl介绍 pycurl模块为libcurl库提供了一个python接口.libcurl是一个开源免费且方便快捷的基于客户端的url传输库,支持FTP,HTTP,HTTPS,IMAP,IMA ...

  5. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  6. python学习之算法、自定义模块、系统标准模块(上)

    算法.自定义模块.系统标准模块(time .datetime .random .OS .sys .hashlib .json和pickle) 一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1. ...

  7. Django 2.0 学习(17):Django 用户认证(auth模块)

    Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...

  8. 在 kafka 的 broke 和 client 之间加入 SSL 双向认证

    在 kafka 的 broke 和 client 之间加入 SSL 双向认证https://blog.csdn.net/hohoo1990/article/details/79110031 kafka ...

  9. http服务需要pycurl模块这样去监控服务

    最近运维还是比较空闲,写篇自己的心得体会.做过运维的应该都做过http服务了.像一些电子商城,或者是一些互联网公司,web的服务之类是至关重要的,近期看了刘天斯大哥的书觉得自己运维平台应该也可以这样去 ...

随机推荐

  1. 自动化测试中执行JS脚本方法封装

    执行JS脚本方法封装: class JavaScript(Base): def execute_javascript(self, js): """执行 JavaScrip ...

  2. Java学习笔记(4)--- 变量类型,修饰符

    1.变量类型: a.定义: 和C++差不多,就是: type identifier [ = value][, identifier [= value] ...]: type为Java数据类型.iden ...

  3. C学习笔记(7)--- typedef,输入输出

    1.typedef: C 语言提供了 typedef 关键字,您可以使用它来为类型(type)取一个新的名字. 比如: typedef unsigned char BYTE; 然后你就可以把BYTE当 ...

  4. 1.Python网络编程_UDP(简略版)

    # -*- coding: utf-8 -*- #2019-11-24 import socket def recv(): udp_socket=socket.socket(socket.AF_INE ...

  5. zz“老司机”成长之路:自动驾驶车辆调试实践

    随着自动驾驶技术的发展,一辆新车从被改装到上路需要经过的调试流程也有了许多提升.今天,我希望结合自己之前的调车经验来跟大家分享一下我们是如何将系统的各个模块逐步上车.调试.集成,进而将一辆“新手”车培 ...

  6. Angular7入门总结篇

  7. Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E bfs + 离线处理

    https://codeforces.com/contest/1037/problem/E 题意 有n个人,m天,在第i天早上,x和y会成为朋友,每天晚上大家都要上车,假如一个人要上车那么他得有至少k ...

  8. Linux下启动SpringBoot打包的jar

    前言 这两天把视力档案后台部署的方式改了一下,由原来打包成war包,部署到一个tomcat里面,转变成直接打包成jar包,然后使用 java -jar命令进行启动 下面讲讲遇到的问题 1)java - ...

  9. Prometheus 监控K8S 资源状态对象

    Prometheus 监控K8S 资源状态对象 官方文档:https://github.com/kubernetes/kube-state-metrics kube-state-metrics是一个简 ...

  10. 【UOJ#308】【UNR#2】UOJ拯救计划

    [UOJ#308][UNR#2]UOJ拯救计划 题面 UOJ 题解 如果模数很奇怪,我们可以插值一下,设\(f[i]\)表示用了\(i\)种颜色的方案数. 然而模\(6\)这个东西很有意思,\(6=2 ...