首页 > Web开发 > 详细

关于requests的urlencode问题

时间:2020-01-02 23:45:47      阅读:249      评论:0      收藏:0      [点我收藏+]

众所周知,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 import urlencode
import requests

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)

关于requests的urlencode问题

原文:https://www.cnblogs.com/b1ing/p/12142766.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!