【问题标题】:Sending a RAW data POST-request with an HTML Form?使用 HTML 表单发送 RAW 数据 POST 请求?
【发布时间】:2011-10-03 16:15:09
【问题描述】:

我需要将 POST 请求正文中的原始数据发送到 Web 服务。我可以使用 HTML 表单完成此操作吗?

使用标准 HTML 输入字段似乎不可避免地会生成 <name_of_input_field>=<DATA> 形式的 POST 正文,而我只想发布 <DATA>

我是否需要借助 javascript 来执行此请求?

【问题讨论】:

    标签: html post forms


    【解决方案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 包括
    猜你喜欢
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2023-01-08
    • 2019-02-25
    • 1970-01-01
    • 2021-12-10
    • 2021-06-28
    相关资源
    最近更新 更多