JAVA HttpPost enctype =“multiform / data”

时间:2013-01-16 07:08:54

标签: java http http-headers httpclient

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

您要发送的多部分实体需要设置两个对象FileBodyStringBody。您所设置的内容仅为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内容。我不确定是否正在使用该编码类型!