多部分请求获取错误代码400 java
我正在使用多功能请求Android中的web服务,发送的请求是:多部分请求获取错误代码400 java,java,android,jax-rs,multipartform-data,Java,Android,Jax Rs,Multipartform Data,我正在使用多功能请求Android中的web服务,发送的请求是: POST / HTTP/1.1 connection: Keep-Alive enctype: multipart/form-data content-type: multipart/form-data;charset=UTF-8;boundary=--===1487292689114=== accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/we
POST / HTTP/1.1
connection: Keep-Alive
enctype: multipart/form-data
content-type: multipart/form-data;charset=UTF-8;boundary=--===1487292689114===
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: es-419,es;q=0.8,en-GB;q=0.6,en;q=0.4
cache-control: max-age=0
upgrade-insecure-requests: 1
user-agent: Dalvik/1.6.0 (Linux; U; Android 4.4.4; 5042A Build/KTU84P)
host: 192.168.10.171:8080
content-length: 990
payload: ----===1487292689114===
Content-Disposition: form-data; name="new_id"
171
----===1487292689114===
Content-Disposition: form-data; name="file"; filename="IMG_20170216_195118.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
����
(
----===1487292689114===--
这是服务:
@POST
@Path("/reportNewImage")
@Consumes(MediaType.MULTIPART_FORM_DATA+"; charset=UTF-8")
@Produces(MediaType.TEXT_PLAIN)
public Response setImage(
@FormDataParam("new_id") String new_id,
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail, @Context HttpHeaders headers) {
...
}
但是,当通过java android代码建立连接时,我收到了相同的错误。当我从html表单建立连接时,结果是成功的。请帮帮我,原因是什么
编辑:
使用html表单发出的请求:
POST / HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Length: 6564
Cache-Control: max-age=0
Origin: http://localhost
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/55.0.2883.87 Chrome/55.0.2883.87 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryNt8QJSIDDDgznij8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost/form.html
Accept-Encoding: gzip, deflate, br
Accept-Language: es-419,es;q=0.8,en-GB;q=0.6,en;q=0.4
------WebKitFormBoundaryNt8QJSIDDDgznij8
Content-Disposition: form-data; name="new_id"
109
------WebKitFormBoundaryNt8QJSIDDDgznij8
Content-Disposition: form-data; name="file"; filename="apple.jpg"
Content-Type: image/jpeg
����JFIFHH��C
...
�������1s�����K�"T�I)���ti6>�d
����
------WebKitFormBoundaryNt8QJSIDDDgznij8--
这是httpURLConnection Android:
URL url = new URL(requestURL);
httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setUseCaches(false);
httpConn.setDoOutput(true); // indicates POST method
httpConn.setDoInput(true);
httpConn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + boundary);
outputStream = httpConn.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
true);
writer.flush();
writer.close();
// checks server's status code first
int status = httpConn.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpConn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
httpConn.disconnect();
} else {
throw new IOException("Server returned non-OK status: " + status);
}
编辑2:
我发现只有在编译这一行时才会出现错误:
httpConn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + boundary);
否则错误代码为415,因为没有定义
内容类型标题。问题在于边界。我在文档中发现边界可以由这组字符组成:
多部分内容类型的唯一必需参数是
边界参数,由一组字符中的1到70个字符组成
通过电子邮件网关已知的字符非常健壮,而不是
以空白结束。(如果边界似乎以白色结尾
空格,则必须假定空白是由
网关,并应删除。)它由
下列BNF:
边界:=0*69 bcharsnospace
bchars:=bcharsnospace/“”
bcharsnospace:=数字/ALPHA/“'”/“(“/”/“/“/”/“+”/“”
/ "," / "-" / "." / "/" / ":" / "=" / "?"
然而,自从我删除“=”字符后,一切都开始正常工作
旧联邦议院:--==1487292689114===
新边界:--X1487292689114x它还说了什么?请求错误,没有进一步的详细信息?您能在服务器端设置一个断点吗?@efekctive我在JAX-RS中设置了一个过滤器,在处理servlet之前打印头和负载,但我无法获得更多信息,因为servlet会立即拒绝请求。你想要什么信息?你能在servlet处理之前比较两个请求吗?当然,看看版本。我尝试添加标题,但仍然不起作用。java android HttpURLConnection请求中没有添加Referer和Origin。