9

requests 的 post 中的 data 如何按顺序进行封装?

 3 years ago
source link: https://www.v2ex.com/t/797095
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Python

requests 的 post 中的 data 如何按顺序进行封装?

  zhuzhuaini · 2 天前 · 976 次点击

假设 data 如下 data={

a = '11',

b = '22',

c = 某个变量,

d = 另一个变量,

e = '33'

} 然后我 requests.post 理论来说 他 data 的顺序应该是 a=11&b=22.....依次按顺序,但是我测试抓包发现,他顺序是乱的,特别是变量,他可能会封装成 a=11&c=某个变量&d=另一个变量值&b=22..... 我想让他就按照从上往下的顺序进行封装起来,百度了下也没人问这类的问题,请问有解吗?

17 条回复    2021-08-21 15:52:45 +08:00

ThirdFlame

ThirdFlame   2 天前

一般不关心这个顺序, 因为 http 服务器那边也不是按照顺序解析的。
你要是非得控制这个顺序,就不要用 requests 了。 可以自行实现。

Trim21

Trim21   2 天前

升级到 python3.6 以上

surbomfla

surbomfla   2 天前 via Android

接收方能正确接收到就行了

Building

Building   2 天前 via iPhone

用数组,或者排序。

zhuzhuaini

zhuzhuaini   2 天前

@Building 请教一下想稍微具体点 不是很明白 谢谢!

zhuzhuaini

zhuzhuaini   2 天前

@ThirdFlame
@surbomfla
目前碰到个网页,比如我要上传 2 段文字,他的逻辑是先来一个 base64 文本 1 然后来一个“TXT[0]”再来个 base64 文本 2,然后再来个"TXT[1]",如果顺序不对的话他就没法识别两段文字了(因为顺序变成了 base1,base2,txt0,txt1 )

ysc3839

ysc3839   2 天前 via Android

尝试传 OrderedDict 进去?

Trim21

Trim21   2 天前

你传的这个 data 是 built-in 的 dict 类型吗?
requests 内部调用的是 data.items(),我试了一下是有序的啊

r = requests.post("https://httpbin.org/post", data=data)

print(type(r.request.body), r.request.body)

ysc3839

ysc3839   2 天前 via Android

或者尝试传 [('key1', 'val1'), ('key2', 'val2')] 这样的数据进去。

zhuzhuaini

zhuzhuaini   2 天前

@Trim21
@ysc3839
抱歉各位,我似乎知道问题出在哪了 他的打他实际上是这样的
data = {

txt = '1',

txt[0]=txt,

txt = '2',

txt[1]=txt

}
他是类似这样的格式 应该是 data 中只允许一个 txt 出现 所以后面的 txt 等于 2 的这个值会将前面的 1 覆盖,,,,所以导致我以为是乱序了,其实是被覆盖了,现在我想问能不能让这个 txt 不被覆盖,可以重复,就是变成'''txt=1&txt[0]=txt&txt=2&txt[1]=txt'''
也就是 txt 作为字典他可以重复出现

zhuzhuaini

zhuzhuaini   2 天前

@zhuzhuaini 抱歉各位,我似乎知道问题出在哪了 他的打他(data)实际上是这样的

Trim21

Trim21   2 天前

@zhuzhuaini #11 按照 10 楼说的那样传 list 进去

skinny

skinny   2 天前

没办法复现……

zhuzhuaini

zhuzhuaini   2 天前

@Trim21 好的了解
@skinny 已解决 感谢尝试 是我搞错了

securityCoding

securityCoding   1 天前 via Android

不用按顺序解啊,本身就有 k v 映射

RRRoger

RRRoger   1 天前

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK