1. 程式人生 > >python關於SSL的認證--pycurl模塊使用

python關於SSL的認證--pycurl模塊使用

sel 無法 兩個 copy style 如果 post 取消 .get

今天在做微信支付退款接口的時候,因為需要使用到雙向證書的認證,所以一開始是沒有頭緒的,後來在網上找到了相類似的教程,發現了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模塊使用