使用 HTML 表单发送 RAW 数据 POST 请求?
Posted
技术标签:
【中文标题】使用 HTML 表单发送 RAW 数据 POST 请求?【英文标题】:Sending a RAW data POST-request with an HTML Form? 【发布时间】:2011-10-03 16:15:09 【问题描述】:我需要将 POST 请求正文中的原始数据发送到 Web 服务。我可以使用 html 表单完成此操作吗?
使用标准 HTML 输入字段似乎不可避免地会生成 <name_of_input_field>=<DATA>
形式的 POST 正文,而我只想发布 <DATA>
。
我是否需要借助 javascript 来执行此请求?
【问题讨论】:
【参考方案1】:我可以使用 HTML 表单完成此操作吗?
没有。
表单可以发送 application/x-www-form-urlencoded 或 multipart/form-data 数据。
如果您想使用不同的数据格式,您必须开始查看 JavaScript 和 XHR(并遵守同源政策等)。
您最好编写服务器端代码来接受上述编码之一——不乏可以解码它们的库。
【讨论】:
不幸的是,目前这不是一个可行的改变。后端与 SpringMVC 紧密结合,在某些情况下使用 @RequestBody 进行输入。【参考方案2】:这里有潜在的黑客攻击。如果您的数据中包含自然的“=”,或者您可以对其进行修改以便以某种无害的方式添加“=”,您可以:
将表单编码类型设置为 text/plain 使用 name 设置隐藏输入,该输入取自您的开头 您的数据,最多但不包括第一个“=” 将输入字段 value 设置为后面的字节 “=”直到数据结束。我了解这项技术的来源:
https://systemoverlord.com/2016/08/24/posting-json-with-an-html-form.html
【讨论】:
太聪明了!我遇到的一个问题;对于 IE,它有一个错误,当使用enctype
时,name
s 仍然是 URI 编码的(value
s 正确地不是)。如果可以的话,最好使用数据的值而不是名称,然后在服务器上将其删除。无论哪种方式,您都需要一些支持 IE 的服务器代码,如果不剪切它,您需要先解码 =
之前的所有内容
我假设您编写了 javascript 来读取输入 text field
(/textarea
?) 值。 javascript 是如何获得它的——你给这个字段一个 id
吗?那不会改变表单数据吗?
我听从了你的指示。根据chrome developer tools | Network|Headers|Form Data
hidden
表单字段名称(我使用json
作为隐藏字段)仍然显示:json: "eventType": "person_sopId", "badgeId" : 7, "sopId": 100 '
所需的结果有 just json 有效载荷而不是 name = json
包括以上是关于使用 HTML 表单发送 RAW 数据 POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章
$_POST 变量以及$GLOBALS['HTTP_RAW_POST_DATA']
使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义