51dev.com IT技术开发者社区

51dev.com 技术开发者社区

Python3的urllib.parse常用小结(urlencode,quote,quote_plus,unquote

PythonIT技术学习阅读(234)2018-07-17 收藏0次评论

支付宝支付  签名字符串在签名sign时 ,用到了 

data 是字典  里面存放要传给支付宝的数据

python2 与python3 导入urllib 时有差别 需要注意

from urllib.parse import quote_plus

def sign_data(self, data):
    data.pop("sign", None)
    # 排序后的字符串
    unsigned_items = self._ordered_data(data)
    unsigned_string = "&".join("{}={}".format(k, v) for k, v in unsigned_items)
    sign = self._sign(unsigned_string)
    ordered_items = self._ordered_data(data)
    quoted_string = "&".join("{}={}".format(k, quote_plus(v)) for k, v in ordered_items)

    # 获得最终的订单信息字符串
    signed_string = quoted_string + "&sign=" + quote_plus(sign)
    return signed_string

这里面用到了 quote_plus

下面开始介绍

1、获取url参数
 
>>> from urllib import parse
>>> url = r'https://docs.python.org/3.5/search.html?q=parse&check_keywords=yes&area=default'
>>> parseResult = parse.urlparse(url)
>>> parseResult
ParseResult(scheme='https', netloc='docs.python.org', path='/3.5/search.html', params='', query='q=parse&check_keywords=yes&area=default', fragment='')
>>> param_dict = parse.parse_qs(parseResult.query)
>>> param_dict
{'q': ['parse'], 'check_keywords': ['yes'], 'area': ['default']}
>>> q = param_dict['q'][0]
>>> q
'parse'
#注意:加号会被解码,可能有时并不是我们想要的
>>> parse.parse_qs('proxy=183.222.102.178:8080&task=XXXXX|5-3+2')
{'proxy': ['183.222.102.178:8080'], 'task': ['XXXXX|5-3 2']}

2、urlencode
>>> from urllib import parse
>>> query = {
  'name': 'wal',
  'age': 19,
  }
>>> parse.urlencode(query)
'name=wal&age=19'
 
3、quote/quote_plus

>>> from urllib import parse
>>> parse.quote('a&b/c')  #未编码斜线
'a%26b/c'
>>> parse.quote_plus('a&b/c')  #编码了斜线
'a%26b%2Fc'
 
4、unquote/unquote_plus

>>>from urllib import parse
>>> parse.unquote('9+2')  #不解码加号
'9+2'
>>> parse.unquote('9+2')  #把加号解码为空格

'9 2'

以上就是Python3的urllib.parse常用小结(urlencode,quote,quote_plus,unquote的全部内容,请多关注【51DEV】IT技术开发者社区。