使用HTML表单发送原始数据POST请求?

18

我需要在POST请求的正文中发送原始数据到Webservice,我能使用HTML表单完成这个任务吗?

使用标准的HTML输入字段似乎不可避免地会生成一个类似于 <name_of_input_field>=<DATA> 的POST正文,而我只想要发送 <DATA>

我是否需要使用JavaScript来执行此请求?

2个回答

11

我能用HTML表单完成这个功能吗?

不行。

表单只能发送application/x-www-form-urlencoded或multipart/form-data格式的数据。

如果你想使用其他数据格式,你需要开始查看JavaScript和XHR(并受到同源策略等限制)。

相反,你最好编写服务器端代码以接受上述一种编码方式——有许多库可用于解码它们。


很遗憾,目前这不是一个可行的更改。后端与SpringMVC紧密结合,某些情况下使用@RequestBody作为输入。 - Joel Westberg

4
这里存在潜在的黑客攻击。如果您的数据中有自然的"=",或者您可以通过某种无害的方式添加"=",那么您可以:
设置表单的enctype为text/plain
设置一个隐藏的输入框,其名称取自您的数据开头直到第一个"="之前
将输入框的值设置为"="后面的字节,一直到数据结尾。
我学习这种技术的来源是:https://systemoverlord.com/2016/08/24/posting-json-with-an-html-form.html

太聪明了!我遇到的一个问题是,对于IE浏览器,在使用该enctype时,name仍然是URI编码的(value是正确的)。如果可以的话,最好使用值作为数据而不是名称,并在服务器上将其截断。无论哪种方式,您都需要一些支持IE的服务器代码,如果不切割,则需要在第一个=之前解码所有内容。 - Hashbrown
我猜你写了JavaScript来读取输入的文本框(/ 文本区域?)的值。JavaScript是如何获取它的 - 你给这个字段一个id了吗?那不会改变表单数据吗? - WestCoastProjects
我按照你的指示操作了。根据 chrome 开发者工具 | 网络 | 标头 | 表单数据hidden 表单字段名(我使用了 json 作为隐藏字段)仍然显示如下:json: { "eventType": "person_sopId", "badgeId" : 7, "sopId": 100 }'。期望的结果只包含 json 消息负载,而不是包括名称为 json 的内容。 - WestCoastProjects

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接