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

如何使用Python Requests构造payload向Java Servlet发POST请求

格式判定

你抓取到的请求体是DWR(Direct Web Remoting)Java RPC框架的标准请求格式,属于application/x-www-form-urlencoded类型的键值对结构,既不是JSON也不是普通业务表单,你原有代码中使用json=payload传参的方式错误,会导致请求头的Content-Type被自动设置为application/json,服务端无法正常解析。

正确构造方式

直接将抓包得到的每一行按等号拆分为键和值,组成普通Python字典,传给requests.post的data参数即可,requests会自动完成表单格式编码并设置正确的请求头,不需要手动序列化。
完整示例代码:

import requests

payload = {
    "callCount": "1",
    "nextReverseAjaxIndex": "0",
    "c0-scriptName": "IssueDataLookup",
    "c0-methodName": "getIssueDisplayDatas",
    "c0-id": "0",
    "c0-e2": "string:79766DGF0",
    "c0-e3": "null:null",
    "c0-e4": "string:MUNI",
    "c0-e1": "Object_Object:{cusip:reference:c0-e2, tmcScaleId:reference:c0-e3, debtType:reference:c0-e4}",
    "c0-param0": "array:[reference:c0-e1]",
    "batchId": "4",
    "instanceId": "0",
    "page": "%2Ftmc%2FTMCEnter",
    "scriptSessionId": "Jqwkwz1udhEOzO!7e9!hCxADydMNEmwYN7o/r9wYN7o-ugUYKsCGc"
}

# 替换原有的json=payload为data=payload
r = requests.post(url, headers=headers, data=payload)
调试注意事项
  • 所有字段值严格按照抓包得到的字符串原样传入,不要自行转换为嵌套字典、不要做JSON序列化。DWR服务端通过字符串前缀(string:、null:、Object_Object:、reference:)做类型解析,修改值时也要遵守这个格式规则。
  • scriptSessionId、batchId、page字段通常和访问会话绑定,如果硬编码抓包值返回鉴权/会话错误,需要先请求对应业务页面,从页面源码或前置接口中获取当前会话的合法值再构造请求。
  • 如果headers中手动设置了Content-Type: application/json,需要删除该配置,使用data参数时requests会自动填充正确的application/x-www-form-urlencoded类型。

请求流量截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:18:15