requests 的 post 中的 data 如何按顺序进行封装? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zhuzhuaini
V2EX    Python

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

  •  
  •   zhuzhuaini 2021-08-20 20:05:43 +08:00 2896 次点击
    这是一个创建于 1588 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设 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
        1
    ThirdFlame  
       2021-08-20 20:08:54 +08:00
    一般不关心这个顺序, 因为 http 服务器那边也不是按照顺序解析的。
    你要是非得控制这个顺序,就不要用 requests 了。 可以自行实现。
    Trim21
        2
    Trim21  
       2021-08-20 20:09:57 +08:00
    升级到 python3.6 以上
    surbomfla
        3
    surbomfla  
       2021-08-20 20:10:05 +08:00 via Android
    接收方能正确接收到就行了
    Building
        4
    Building  
       2021-08-20 20:10:55 +08:00 via iPhone
    用数组,或者排序。
    zhuzhuaini
        5
    zhuzhuaini  
    OP
       2021-08-20 20:13:44 +08:00
    @Trim21 已经 3.8 了 没用
    zhuzhuaini
        6
    zhuzhuaini  
    OP
       2021-08-20 20:14:16 +08:00
    @Building 请教一下想稍微具体点 不是很明白 谢谢!
    zhuzhuaini
        7
    zhuzhuaini  
    OP
       2021-08-20 20:15:53 +08:00
    @ThirdFlame
    @surbomfla
    目前碰到个网页,比如我要上传 2 段文字,他的逻辑是先来一个 base64 文本 1 然后来一个“TXT[0]”再来个 base64 文本 2,然后再来个"TXT[1]",如果顺序不对的话他就没法识别两段文字了(因为顺序变成了 base1,base2,txt0,txt1 )
    ysc3839
        8
    ysc3839  
       2021-08-20 20:16:14 +08:00 via Android
    尝试传 OrderedDict 进去?
    Trim21
        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)
    ysc3839
        10
    ysc3839  
       2021-08-20 20:19:32 +08:00 via Android
    或者尝试传 [('key1', 'val1'), ('key2', 'val2')] 这样的数据进去。
    zhuzhuaini
        11
    zhuzhuaini  
    OP
       2021-08-20 20:28:02 +08:00
    @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
        12
    zhuzhuaini  
    OP
       2021-08-20 20:28:25 +08:00
    @zhuzhuaini 抱歉各位,我似乎知道问题出在哪了 他的打他(data)实际上是这样的
    Trim21
        13
    Trim21  
       2021-08-20 20:34:12 +08:00
    @zhuzhuaini #11 按照 10 楼说的那样传 list 进去
    skinny
        14
    skinny  
       2021-08-20 20:39:00 +08:00
    没办法复现……
    zhuzhuaini
        15
    zhuzhuaini  
    OP
       2021-08-20 20:40:44 +08:00
    @Trim21 好的了解
    @skinny 已解决 感谢尝试 是我搞错了
    securityCoding
        16
    securityCoding  
       2021-08-21 15:26:41 +08:00 via Android
    不用按顺序解啊,本身就有 k v 映射
    RRRoger
        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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     960 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:22 PVG 03:22 LAX 11:22 JFK 14:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86