1. ホーム
  2. java

[解決済み] Apache HttpClient によるマルチパートフォームの投稿

2023-08-09 06:55:56

質問

私はHttpClientについてかなり未熟で、ドキュメントの不足(またはあからさまに不正確な)には非常にいらいらさせられます。 私はApache Http Clientで次のポスト(以下にリストされている)を実装しようとしていますが、実際にそれを行う方法が全くわかりません。 私は来週までドキュメントに埋没するつもりですが、おそらくより経験豊富なHttpClientのコーダーは、より早く私に答えを与えることができるでしょう。

投稿する

Content-Type: multipart/form-data; boundary=---------------------------1294919323195
Content-Length: 502
-----------------------------1294919323195
Content-Disposition: form-data; name="number"

5555555555
-----------------------------1294919323195
Content-Disposition: form-data; name="clip"

rickroll
-----------------------------1294919323195
Content-Disposition: form-data; name="upload_file"; filename=""
Content-Type: application/octet-stream


-----------------------------1294919323195
Content-Disposition: form-data; name="tos"

agree
-----------------------------1294919323195--

どのように解決するのですか?

のMultipartEntityBuilderを使用します。 HttpMime ライブラリ を使用して、必要なリクエストを実行します。

私のプロジェクトでは、このように行っています。

HttpEntity entity = MultipartEntityBuilder
    .create()
    .addTextBody("number", "5555555555")
    .addTextBody("clip", "rickroll")
    .addBinaryBody("upload_file", new File(filePath), ContentType.APPLICATION_OCTET_STREAM, "filename")
    .addTextBody("tos", "agree")
    .build();

HttpPost httpPost = new HttpPost("http://some-web-site");
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
HttpEntity result = response.getEntity();

これが助けになることを願っています。

(この記事を更新し、非推奨の MultipartEntity の代わりに MultipartEntityBuilder を使用し、@mtomy のコードを例として使用します)