我正在尝试使用HttpClient 4.2.3
来模拟表单提交的HttpPost请求
表单类似于
<form action="localhost/xyz.aspx" method = "post" enctype="multipart/form-data">
<input type="text" name="name">
<input type="text" name="age">
<input type="text" name="submit">
</form>
当我尝试使用java代码时,
List<NameValuePair> formparams1 = new ArrayList<NameValuePair>();
formparams1.add(new BasicNameValuePair("name","john"));
formparams1.add(new BasicNameValuePair("age", "10"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams1);
entity.setContentEncoding("multipart/form-data");
entity.setContentType("multipart/form-data;boundary=--asd123");
我收到 HTTP状态400 - java.lang.RuntimeException:在部分内找不到Content-Disposition标头
我也搜索了一会儿,尝试了另一种方式,
MultipartEntity entity = new MultipartEntity();
entity.addPart("name",new StringBody("john",Charset.forName("UTF-8")));
entity.addPart("age", new StringBody("10",Charset.forName("UTF-8")));
我仍然收到 HTTP 415 HTTP 400
等错误任何人都可以帮我模拟这样的请求。
TIA
答案 0 :(得分:1)
您要发送的多部分实体需要设置两个对象FileBody
和StringBody
。您所设置的内容仅为StringBody
。
简而言之,多部分请求通常由文件组成。服务器需要文件名(使用StringBody
设置)和文件内容(使用FileBody
设置)。
例如。
FileBody name = new FileBody(new File(fileName));
StringBody content = new StringBody("Filename: " + fileName);
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("name", bin);
reqEntity.addPart("content", content);
httppost.setEntity(reqEntity);
在您的情况下,您似乎没有发送任何mutlipart内容。我不确定是否正在使用该编码类型!