urlencode

from urllib.parse import urlencode, quote, unquote
import json


# urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串

# demo1
args = {
    "wd": "尚学堂",
    "ie": "utf-8"
}
print(urlencode(args))

url = "https://www.baidu.com/s?{}".format(urlencode(args))
print(url)  # https://www.baidu.com/s?wd=%E5%B0%9A%E5%AD%A6%E5%A0%82&ie=utf-8

print()


# demo1
values = {}
values['username'] = '02蔡彩虹'
values['password'] = 'ddddd?'
url = "http://www.baidu.com"
data = urlencode(values)
print(data)
# 结果:username=02%E8%94%A1%E5%BD%A9%E8%99%B9&password=ddddd%3F


"""
如果只想对一个字符串进行urlencode转换,urllib提供另外一个函数:quote();
很多地方会用多传输的时候,将json字符串进行urlEncode后,进行传输
"""


filter = {'and': [{'field': 'msgSubject', 'value': 'obc_code', 'operator': '='},
                  {'field': 'msgTo', 'value': 'OBC', 'operator': '='},
                  {'field': 'msgType', 'value': 'confirmASNData', 'operator': '='}]}
# 先把字段转为json
filter_json = json.dumps(filter)
# 再把json串进行urlencode
filter_encode = quote(str(filter_json))
print(filter_encode)
# %7B%22and%22%3A%20%5B%7B%22field%22%3A%20%22msgSubject%22%2C%20%22value%22%3A%20%22obc_code%22%2C%20%22operator%22%3A%20%22%3D%22%7D%2C%20%7B%22field%22%3A%20%22msgTo%22%2C%20%22value%22%3A%20%22OBC%22%2C%20%22operator%22%3A%20%22%3D%22%7D%2C%20%7B%22field%22%3A%20%22msgType%22%2C%20%22value%22%3A%20%22confirmASNData%22%2C%20%22operator%22%3A%20%22%3D%22%7D%5D%7D

print()

"""
python 没有urlDecode的函数
如果需要解码,urllib提供了unquote()这个函数
"""

filter_decode = unquote(filter_encode)
print(filter_decode)
# out : {"and": [{"field": "msgSubject", "value": "obc_code", "operator": "="}, {"field": "msgTo", "value": "OBC", "operator": "="}, {"field": "msgType", "value": "confirmASNData", "operator": "="}]}