Как создать инкапсулированный multipart с помощью Apache httpclient - PullRequest
1 голос
/ 11 ноября 2019

Мне нужно создать и отправить HttpPost, содержащий данные формы, которые должны выглядеть следующим образом:

Как это должно выглядеть

Я использую Apache httpmimeи httpclient (версия 4.5.10):

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.10</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.5.10</version>
    </dependency>

Это мой код:

...
ContentType contentType = ContentType.create("multipart/form-data");        

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

HttpEntity entity = builder.addTextBody("Name 123", "Value 123").setContentType(contentType).build();
httppost.setEntity(entity);
HttpClient myClient = HttpClientBuilder.create().disableRedirectHandling().build();
response = myClient.execute(httppost, context);
...

Код работает (исключение не возникает), но сообщение выглядит так в whireshark: Как это выглядит в настоящее время

Как вы можете видеть, есть только блок данных, но нет "инкапсулированных составных частей" - частей. Веб-приложение, которое получает пост-данные, нуждается в данных в «формате», показанном на первом скриншоте. -> Что мне нужно сделать для достижения этой цели?

Я также попробовал другой подход, но он не решил мою проблему (без «инкапсулированной составной части» - части):

List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("Name 123", "Value 123"));
httppost.setEntity(new UrlEncodedFormEntity(params));
HttpClient myClient = HttpClientBuilder.create().disableRedirectHandling().build();
response = myClient.execute(httppost, context);

Любая помощь высоко ценится!

...