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

posted @ 2018-01-25 20:36  zzy0306  阅读(4750)  评论(0编辑  收藏  举报