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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM