python2018上海脱产_python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码
前言
urllib.parse 里面三個方法:urlencode,quote,unquote詳解。
在做接口自動化過程中,http協(xié)議在發(fā)送url的時候,是以urlencode的編碼格式傳過去的,通常requests庫會幫我們自動處理了。但是服務(wù)端返回的url地址,有時候是以urlencode的編碼傳過來的,我們需要從url上提取一些參數(shù)信息,這時候就需要對url解碼了。
為什么需要urlencode編碼
通常如果一樣?xùn)|西需要編碼,說明其并不適合直接傳輸。原因多種多樣,如Size過大,包含隱私數(shù)據(jù)。對于Url來說,之所以要進(jìn)行編碼,是因為Url中有些字符會引起歧義。
例如,Url參數(shù)字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務(wù)器解析錯誤,因此必須將引起歧義的&和=符號進(jìn)行轉(zhuǎn)義,也就是對其進(jìn)行編碼。
urlencode編碼
先看一個python請求案例
import requests
url = "http://www.example.com/"
par = {
"a": "上海",
"b": "悠悠"
}
body = {
"content": "悠悠",
"charsetSelect": "utf-8",
"en": "UrlEncode編碼"
}
r = requests.post(url, params=par, data=body)
print(r.url)
運(yùn)行結(jié)果:
通過fiddler抓包看raw,會發(fā)現(xiàn)傳過去的request部分,是經(jīng)過了urlencode編碼的(編碼的操作requests庫已經(jīng)幫我們自動處理了,這就是requests人性化的地方)
urlencode編碼
如果我們想自己操作,對字符串傳入的字典參數(shù)進(jìn)行urlencode編碼,就需要用到兩個方法urlencode和quote
urlencode方法傳字典參數(shù)
from urllib.parse import urlencode, quote, unquote
# urlencode方法參數(shù)是字典
body = {
"content": "悠悠",
"charsetSelect": "utf-8",
"en": "UrlEncode編碼"
}
print(urlencode(body))
運(yùn)行結(jié)果:
content=%E6%82%A0%E6%82%A0&charsetSelect=utf-8&en=UrlEncode%E7%BC%96%E7%A0%81
quote傳字符串參數(shù)
# quote方法參數(shù)是字符串
print(quote("上海-悠悠"))
url = "http://www.example.com/?a=上海&b=悠悠"
print(quote(url))
運(yùn)行結(jié)果:
%E4%B8%8A%E6%B5%B7-%E6%82%A0%E6%82%A0
http%3A//www.example.com/%3Fa%3D%E4%B8%8A%E6%B5%B7%26b%3D%E6%82%A0%E6%82%A0
urlencode解碼
如果返回的數(shù)據(jù)里面有urlencode編碼的字符串,類似于%E4%B8%8A%E6%B5%B7&b=%E6%82%A0%E6%82%A0這種格式,可以使用unquote方法解碼
import requests
from urllib.parse import urlencode, quote, unquote
url = "http://www.example.com/"
par = {
"a": "上海",
"b": "悠悠"
}
body = {
"content": "悠悠",
"charsetSelect": "utf-8",
"en": "UrlEncode編碼"
}
r = requests.post(url, params=par, data=body)
print(r.url)
print(unquote(r.url))
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的python2018上海脱产_python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 戴尔怎么修改boot 修改戴尔电脑启动项
- 下一篇: python3多进程 queue 取值_