-1

我正在尝试使用 HttpPost 模拟表单提交请求HttpClient 4.2.3

形式类似于

<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: could find no Content-Disposition header within part

我也搜索了一段时间并尝试了另一种方法,

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

4

1 回答 1

1

您发送的多部分实体需要设置两个对象FileBodyStringBody. 您设置的只是StringBody.

简而言之,Multipart 请求通常由文件组成。服务器需要文件名(使用设置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);

在您的情况下,您似乎没有发送任何多部分内容。我不确定是否使用该编码类型!

于 2013-01-16T07:30:03.497 回答