python requests urlencode_关于requests的urlencode问题

本文探讨了requests库自动urlencode的局限性,如何避免重复编码和指定字符集,并提供了针对问题一和二的详细解决方法,包括如何转换字典数据、设置Content-Type头和使用特定编码的urlencode。
摘要由CSDN通过智能技术生成

众所周知,requests会对请求自动地进行urlencode,但这个自动进行的urlencode其实有很多不尽人意的地方:

1.有时候,我们的data是已经urlencode过了的data,尽管我们不希望它进行urlencode,但它仍然会再urlencode一次,导致data面目全非;

2.有时候,我们虽然希望urlencode但对编码的字符集有要求,但它却无法做到,而且会用默认的urlencode,使得data换了面貌。

requests中urlencode的大概规则:

对于get请求,requests会自动判断参数是否已经进行过urlencode

对于post请求,如果data为字典形式,则会自动强制进行urlencode(不管参数是否已经经过urlencode)如果data为字符串形式,则会自动判断参数是否经过urlencode,但如果要这样使用的话则需要加上header{'Content-Type': 'application/x-www-form-urlencoded'}

所以对于问题一:

我们只需要在使用post请求时,把字典形式的参数转化成字符串并加上headers就可以解决了

headers={'Content-Type': 'application/x-www-form-urlencoded'}

'''data={'a':'%E5%BE%B7%E7%8E%9B%E8%A5%BF%E4%BA%9A','b':'123'}

=>

data="a=%E5%BE%B7%E7%8E%9B%E8%A5%BF%E4%BA%9A&b=123"'''

而对于问题二:

则需要先把data转化为所需字符编码的urlencode再加上headers即可

from urllib.parse importurlencodeimportrequests

headers={'Content-Type': 'application/x-www-form-urlencoded'}

data={'a':'德玛西亚','b':'132'}

data=urlencode(data,encoding='gb2312')

r=requests.post(url,headers=headers,data=data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值