如何解决在java中使用表单数据的HTTP POST请求返回400
我正在用 java 发出一个 post 请求并得到 400 作为响应代码。但是,在 Postman 中构建相同的请求会得到 200。
这是我用于发出请求的 Java 代码:-
final URI baseUri = new URIBuilder("localhost:8080/api/service?ask=true&uid=user&pp=secret").build();
final URIBuilder applicationUriBuilder = new URIBuilder(baseUri);
URI applicationURI = applicationUriBuilder.build();
HttpPost httpPost = new HttpPost(applicationURI);
File resumeFile = resourceLoader.getResource("classpath:/data/2655386.docx").getFile();
StringBody userDetailsString = new StringBody(objectMapper.writeValueAsString(userProfileDetails),MULTIPART_FORM_DATA);
FileBody fileBody = new FileBody(resumeFile,DEFAULT_BINARY);
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.addPart("props",userDetailsString);
entityBuilder.addPart("file",fileBody);
entityBuilder.addTextBody("contentField","CONTENT");
HttpEntity entity = entityBuilder.build();
httpPost.setEntity(entity);
httpPost.addHeader(HttpHeaders.CONTENT_TYPE,MediaType.MULTIPART_FORM_DATA_VALUE);
httpPost.addHeader(HttpHeaders.ACCEPT,"*/*");
CloseableHttpResponse httpResponse = httpClient.execute(httpPost))
String json = EntityUtils.toString(httpResponse.getEntity());
我收到此错误
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 400 Bad Request</title>
</head>
<body><h2>HTTP ERROR 400</h2>
<p>Problem accessing localhost:8080/api/service?ask=true&uid=user&pp=secret. Reason:
<pre> Bad Request</pre></p><hr><i><small>Powered by Jetty://</small></i><hr/>
</body>
</html>
有人可以建议代码有什么问题吗?提前致谢
解决方法
也许 'content-type'(MIME 类型)不匹配会引发此错误。 Postman 不会阻止此问题,但浏览器对“内容类型”问题非常严格。对于文件类型,它将是 multipart/form-data。
Content-Type: multipart/form-data;
为了降低安全风险,浏览器检查请求和响应 MIME 类型。如果它们不匹配,则浏览器/服务器端会阻止内容/内容传送。这是一项安全功能。从客户端(如浏览器),您可以停止 MIME 类型检查。这对于服务器端也是如此。但它增加了安全风险。
从 wiki 我们可以找到安全风险的基本概念,
内容嗅探,也称为媒体类型嗅探或MIME嗅探,是一种检查字节流内容以尝试推断其中的数据。内容嗅探通常用于补偿缺少准确元数据的情况,否则需要正确解释文件。内容嗅探技术倾向于使用依赖于大多数文件格式中发现的冗余的混合技术:查找文件签名和幻数,以及包括搜索众所周知的代表性子字符串、字节频率的使用和 n-gram 在内的启发式方法表和贝叶斯推理。
有关 MIME 类型的更多信息,您可以阅读此article。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。