用request作post请求,需要有key值重复的form表单怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用request作post请求,需要有key值重复的form表单怎么做相关的知识,希望对你有一定的参考价值。

参考技术A 关于django的POST常见方法 1.用post方法去取form表单的值在取值前,先得判断是否存在这个key if not ...即如何以post形式向server发送ajax请求,在发送请求之前,第一个我们需要解决的问题就是...本回答被提问者和网友采纳

HTTP原始文本POST请求[重复]

【中文标题】HTTP原始文本POST请求[重复]【英文标题】:HTTP raw text POST request [duplicate] 【发布时间】:2018-03-11 00:05:54 【问题描述】:

我需要计算原始 HTTP 发布请求的哈希值,并将其与 Java 中相同标头中的签名哈希值进行比较。问题是,我尝试了多种方法,但无法提取发送的确切 POST 请求。附上请求:

我需要完全相同的字符串(以及所有 % 和其他符号),因为即使是单个空格差异也会生成不正确的哈希。我们可以在这里使用自定义过滤器吗,如果可以,那么究竟如何?

【问题讨论】:

请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。 【参考方案1】:

您使用的是 servlet 还是 jersey?在 servlet 中,您可以获取请求的原始流并转换为字符串。 HttpServletRequest#getInputStream() 或 getReader。

例如

InputStream body = request.getInputStream();
// ..

编辑:添加我拥有的代码,这是可行的。

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        InputStream is = request.getInputStream();
        //this convertStreamToString is my internal method. You can have any your own conversion API
        System.out.println("----"+convertStreamToString(is)); 
        processRequest(request, response);
    

【讨论】:

警告:当您这样做时,您可能无法再使用getParameter(),因此您也必须自己处理内容。正如getParameter() 的javadoc 所说:如果参数数据是在请求正文中发送的,例如发生在HTTP POST 请求中,那么直接通过getInputStream()getReader() 读取正文可能会干扰执行这个方法。 这是一个很好的观点。谢谢@Andreas。可以先获取 getParameters() 然后调用流/阅读器吗?我需要恢复到 API。 我认为问题在于,如果内容是流式传输的(客户端决定),那么内容只能处理一次。 getInputStream()getReader()getParameter()(以及它的表亲)都使用内容。我认为,如果内容是完整发送的,即没有流式传输,它们都会起作用,因此 javadoc 中的“可以干扰”。流式传输是指内容被分块,即content-length 标头未给出。 getReader() 和 getInputStream() 没有帮助。他们返回空值。但是,我在 getParamterMap() 中获取值,但 htis 返回一个 map,但我的问题是我需要完全相同的原始数据而无需任何更改。 在调用任何参数之前调用它。就像@Andreas 指出的那样,一旦您调用 getparameter(),流可能已经被读取并重置。

以上是关于用request作post请求,需要有key值重复的form表单怎么做的主要内容,如果未能解决你的问题,请参考以下文章

HTTP请求中的form data和request payload的区别

NodeJShttp请求获取get和post参数

Cypress web自动化31-request发post请求登录接口

Cypress web自动化31-request发post请求登录接口

python3+requests:get/post请求

post方法 request.getInputStream()为空解惑