You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以application/x-www-form-urlencoded发送含列表的POST请求

问题

为了避免手动在网站添加汽车换油等保养记录,编写程序时遇到POST请求发送问题:

  • 浏览器发送的请求Content-Type为application/x-www-form-urlencoded,form data中的changed字段是JSON格式的列表
  • 使用requests库的data参数发送时,changed字段值被错误解析
  • 使用json参数则Content-Type变为application/json,不符合浏览器的请求类型
  • 需要发送符合要求的请求,保持changed字段值的双引号JSON格式

浏览器请求示例:

Accept:*/*
Accept-Encoding:gzip, deflate, br
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Cookie: < coookies! >
Host:
Origin:
Referer:
Sec-Fetch-Dest:empty
Sec-Fetch-Mode:cors
Sec-Fetch-Site:same-origin
Sec-Gpc:1
User-Agent:Chrome/118.0.0.0 Safari/537.36

Form data:
bio: test car
owner: OneMan
changed:[{"changed":"oil","mil":127732}, {"changed":"breakpads","mil":126876}]

原测试代码:

import requests
import json

l = [{"changed":"oil","mil":127732},
     {"changed":"breakpads","mil":126876}]

datas = {
    'owner': 'someowner',
    'bio': 'bio',
    'changed':l
}

r = requests.post('https://httpbin.org/post', data=datas)
print(r.text)

当前输出中changed字段值异常,期望的form部分输出:

"form": {
    "bio": "bio", 
    "changed": [{"changed":"oil","mil":127732}, {"changed":"breakpads","mil":126876}], 
    "owner": "someowner"
  }, 
解决方案

直接将changed字段的列表手动序列化为JSON字符串,再放入data字典中发送即可,既能保持application/x-www-form-urlencoded的Content-Type,又能让changed字段以正确的JSON格式传递。

修正后的代码:

import requests
import json

l = [{"changed":"oil","mil":127732},
     {"changed":"breakpads","mil":126876}]

datas = {
    'owner': 'someowner',
    'bio': 'bio',
    # 将列表转为标准JSON字符串,保留双引号格式
    'changed': json.dumps(l)
}

# requests使用data参数时默认Content-Type为application/x-www-form-urlencoded,无需额外设置
r = requests.post('https://httpbin.org/post', data=datas)
print(r.text)
说明
  • 原代码直接传入列表时,requests会自动将其拆分为多键值对格式(如changed=oil&changed=breakpads),和浏览器发送的JSON字符串格式不符
  • json.dumps(l)将列表序列化为标准JSON字符串,作为普通字符串值传入data后,requests会按浏览器的form data格式传递该字段
  • 此时请求的Content-Type保持为application/x-www-form-urlencoded,完全匹配浏览器的请求类型

内容的提问来源于stack exchange,提问作者Ownedds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:23:11