使用 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 时,names 仍然是 URI 编码的(values 正确地不是)。如果可以的话,最好使用数据的值而不是名称,然后在服务器上将其删除。无论哪种方式,您都需要一些支持 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 数据未定义

html中form表单使用POST提交数据是否可以被查看到?

axios发送post请求,如何提交表单数据?

axios发送post请求,如何提交表单数据?

axios发送post请求,提交表单数据