HttpClient 4を使用して、postはmultipart/form-dataデータをコミットします.
8606 ワード
質問の由来:
Vert.xのプロジェクトでは、公衆番号の開発を行う際、ユーザーの画像に返信する際に、まず画像をアップロードし、mediaを取得する必要があることを発見しました.id、そしてこのメディアを持ってidはデータを送信します.
問題はVert.xのvertx-web-clientはフォームファイルアップロード(form-data)方式post要求を提供しません.
そこで、HttpClientメソッドを探すしかありません.このようなリクエストを組み立てるのは簡単ではありません
ソリューション:
HttpClient 4を使用して実装できます.次に、実装方法を見てみましょう.
コードがあります.
DefaultHttpClientが古くなったことを発見しました.参考:DefaultHttpClient()が古くなったので、公式サイトapiで確認します.
変換:
すべてのコードは次のとおりです.
このうち、以前のバージョンのMultipartEntityも時代遅れで、HttpClient 4.5 MultipartEntityBuilder方式を採用し、「Fluent」の影を見ることができる.
Multipart/form-dataの理解を深めるために、リンクを置きます:Multipart/form-dataアップロードの詳細
今は非同期の方法が欠けています.非同期リクエストの方法が見つかったら、ここに貼って補充します.
Vert.xのプロジェクトでは、公衆番号の開発を行う際、ユーザーの画像に返信する際に、まず画像をアップロードし、mediaを取得する必要があることを発見しました.id、そしてこのメディアを持ってidはデータを送信します.
問題はVert.xのvertx-web-clientはフォームファイルアップロード(form-data)方式post要求を提供しません.
そこで、HttpClientメソッドを探すしかありません.このようなリクエストを組み立てるのは簡単ではありません
ソリューション:
HttpClient 4を使用して実装できます.次に、実装方法を見てみましょう.
コードがあります.
HttpClient httpClient = new DefaultHttpClient();
DefaultHttpClientが古くなったことを発見しました.参考:DefaultHttpClient()が古くなったので、公式サイトapiで確認します.
変換:
HttpClient httpClient = HttpClients.createDefault();
すべてのコードは次のとおりです.
String postUrl = "https://" + Constants.WX_INTERFACE_HOST + "/cgi-bin/media/upload?access_token="
+ accessToken
+ "&type=" + type;
HttpClient httpClient = HttpClients.createDefault();
File file = new File("riven.jpg");
if (file == null || !file.exists()) {
throw new FileNotFoundException();
}
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder
.addBinaryBody("media", file)
.setMode(HttpMultipartMode.RFC6532);
HttpPost httpPost = new HttpPost(postUrl);
httpPost.setEntity(multipartEntityBuilder.build());
httpPost.setHeader("Content-Type", ContentType.MULTIPART_FORM_DATA.toString());
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
String content = EntityUtils.toString(httpEntity);
System.out.println(content);
このうち、以前のバージョンのMultipartEntityも時代遅れで、HttpClient 4.5 MultipartEntityBuilder方式を採用し、「Fluent」の影を見ることができる.
Multipart/form-dataの理解を深めるために、リンクを置きます:Multipart/form-dataアップロードの詳細
今は非同期の方法が欠けています.非同期リクエストの方法が見つかったら、ここに貼って補充します.