python接口自動化(二十五) urlencode編碼%E7%94%9F%E6%B4%BB與解碼


前言

urllib.parse里面三個方法:urlencode,quote,unquote詳解。

在做接口自動化過程中,http協議在發送url的時候,是以urlencode的編碼格式傳過去的,通常requests庫會幫我們自動處理了。但是服務端返回的url地址,有時候是以urlencode的編碼傳過來的,我們需要從url上提取一些參數信息,這時候就需要對url解碼了。

為什么需要urlencode編碼

通常如果一樣東西需要編碼,說明其並不適合直接傳輸。原因多種多樣,如Size過大,包含隱私數據。對於Url來說,之所以要進行編碼,是因為Url中有些字符會引起歧義。

例如,Url參數字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分割,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務器解析錯誤,因此必須將引起歧義的&和=符號進行轉義,也就是對其進行編碼。

requests 自動對url urlencode編碼

先看一個python請求案例

import requests
url="http://www.example.com/"
par={
    "a":"武漢",
    "b":"生活"
}
body={
    "content":"綠蘿",
    "en":"編碼"
}
r=requests.post(url,params=par,data=body)
print(r.url)

 運行結果

http://www.example.com/?a=%E6%AD%A6%E6%B1%89&b=%E7%94%9F%E6%B4%BB

在瀏覽器中打開上面的結果

 

 

 會發現傳過去的request部分,是經過了urlencode編碼的(編碼的操作,requests庫已經幫我們自動處理了,這就是requests人性化的地方)

urlencode 、quote編碼

如果我們想自己操作,對字符串傳入的字典參數進行urlencode編碼,就需要用到兩個方法urlencode和quote

urlencode方法字典參數

from urllib.parse import urlencode,quote,unquote
b={
    "content":"夏天",
    "溫度":"高"
}
print(urlencode(b))

 運行結果:

content=%E5%A4%8F%E5%A4%A9&%E6%B8%A9%E5%BA%A6=%E9%AB%98

quote方法字符串參數

from urllib.parse import urlencode,quote,unquote
print(quote("夏天"))
url="http://www.example.com/?a=武漢&b=夏天"
print(quote(url))  

 運行結果:

%E5%A4%8F%E5%A4%A9
http%3A//www.example.com/%3Fa%3D%E6%AD%A6%E6%B1%89%26b%3D%E5%A4%8F%E5%A4%A9

 unquote解碼

如果返回的數據里面有urlencode編碼的字符串,類似於 %E5%A4%8F%E5%A4%A9這種格式,可以使用unquote方法解碼

import requests
from urllib.parse import urlencode,quote,unquote
url="http://www.example.com/"
p={
    "season":"夏天",
    "溫度":"39"
}
r=requests.get(url,params=p)
print(r.url)
print(unquote(r.url))  

 運行結果

http://www.example.com/?season=%E5%A4%8F%E5%A4%A9&%E6%B8%A9%E5%BA%A6=39
http://www.example.com/?season=夏天&溫度=39

  


免責聲明!

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



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