Python常見問題 - requests請求參數包含中文報錯:UnicodeEncodeError: 'latin-1' codec can't encode characters in position 13-14: 小明 is not valid Latin-1. Use body.encode('utf-8')


背景

在做接口自動化的時候,Excel作為數據驅動,里面存了中文,通過第三方庫讀取中文當請求參數傳入 requests.post() 里面,就會報錯

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 13-14: Body ('小明') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

此時我封裝的post請求方法是這樣的

def post(self, url, data=None, file=None, header=None, cookie=None):
    try:
        res = requests.post(url, data=data, files=file, headers=header, cookies=cookie, verify=False)
        return res
    except BaseException as e:
        loggings.error("post請求錯誤,錯誤原因:%s" % e)
        raise e

這個時候,我們要將傳入的參數按照utf-8格式編碼

# 先轉成Json字符串
data = json.dumps(data) 

# 按照utf-8編碼成字節碼 
data = data.encode("utf-8")

改造后的方法如下

def post(self, url, data=None,  file=None, header=None, cookie=None):
    try:
        data = json.dumps(data) 
        data = data.encode("utf-8")
        res = requests.post(url, data=data, files=file, headers=header, cookies=cookie, verify=False)
        return res
    except BaseException as e:
        loggings.error("post請求錯誤,錯誤原因:%s" % e)
        raise e

 

當然有更簡單的方法就是將字典數據轉成json字符串傳入,請求參數名叫 data ,代碼如下:

def post(self, url, data=None,  file=None, header=None, cookie=None):
    try:
        data = json.dumps(data) 
        res = requests.post(url, json=data, files=file, headers=header, cookies=cookie, verify=False)
        return res
    except BaseException as e:
        loggings.error("post請求錯誤,錯誤原因:%s" % e)
        raise e

 


免責聲明!

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



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