假设 data 如下 data={
a = '11',
b = '22',
c = 某个变量,
d = 另一个变量,
e = '33'
} 然后我 requests.post 理论来说 他 data 的顺序应该是 a=11&b=22.....依次按顺序,但是我测试抓包发现,他顺序是乱的,特别是变量,他可能会封装成 a=11&c=某个变量&d=另一个变量值&b=22..... 我想让他就按照从上往下的顺序进行封装起来,百度了下也没人问这类的问题,请问有解吗?
1
ThirdFlame 2021-08-20 20:08:54 +08:00
一般不关心这个顺序, 因为 http 服务器那边也不是按照顺序解析的。
你要是非得控制这个顺序,就不要用 requests 了。 可以自行实现。 |
2
Trim21 2021-08-20 20:09:57 +08:00
升级到 python3.6 以上
|
3
surbomfla 2021-08-20 20:10:05 +08:00 via Android
接收方能正确接收到就行了
|
4
Building 2021-08-20 20:10:55 +08:00 via iPhone
用数组,或者排序。
|
5
zhuzhuaini OP @Trim21 已经 3.8 了 没用
|
6
zhuzhuaini OP @Building 请教一下想稍微具体点 不是很明白 谢谢!
|
7
zhuzhuaini OP @ThirdFlame
@surbomfla 目前碰到个网页,比如我要上传 2 段文字,他的逻辑是先来一个 base64 文本 1 然后来一个“TXT[0]”再来个 base64 文本 2,然后再来个"TXT[1]",如果顺序不对的话他就没法识别两段文字了(因为顺序变成了 base1,base2,txt0,txt1 ) |
8
ysc3839 2021-08-20 20:16:14 +08:00 via Android
尝试传 OrderedDict 进去?
|
9
Trim21 2021-08-20 20:19:21 +08:00
你传的这个 data 是 built-in 的 dict 类型吗?
requests 内部调用的是 data.items(),我试了一下是有序的啊 r = requests.post("https://httpbin.org/post", data=data) print(type(r.request.body), r.request.body) |
10
ysc3839 2021-08-20 20:19:32 +08:00 via Android
或者尝试传 [('key1', 'val1'), ('key2', 'val2')] 这样的数据进去。
|
11
zhuzhuaini OP |
12
zhuzhuaini OP @zhuzhuaini 抱歉各位,我似乎知道问题出在哪了 他的打他(data)实际上是这样的
|
13
Trim21 2021-08-20 20:34:12 +08:00
@zhuzhuaini #11 按照 10 楼说的那样传 list 进去
|
14
skinny 2021-08-20 20:39:00 +08:00
没办法复现……
|
15
zhuzhuaini OP |
16
securityCoding 2021-08-21 15:26:41 +08:00 via Android
不用按顺序解啊,本身就有 k v 映射
|
17
RRRoger 2021-08-21 15:52:45 +08:00
requests 的 data 和 json 两个参数的区别 楼主是不是有点模糊
data: A dictionary, list of tuples, bytes or a file object to send to the specified url json: A JSON object to send to the specified url |