マルチパートのHTTPリクエストを送信する方法【Android】
AndroidからマルチパートのHTTPリクエストを送信するプログラムの書き方を紹介します。マルチパートということはファイルの送信と同時に他のパラメータを送信したり、または複数のファイルを同時に送信したりすることができます。覚えておいて、損はありません。
private void request() { // リクエストボディを作成します final MediaType TEXT = MediaType.parse("text/plain; charset=utf-8"); final String BOUNDARY = String.valueOf(System.currentTimeMillis()); RequestBody requestBody = new MultipartBody.Builder(BOUNDARY) .setType(MultipartBody.FORM) .addPart( Headers.of("Content-Disposition", "form-data; name=\"photo_id\""), RequestBody.create(TEXT, photo_id)).build(); // Content-Length の作成 Buffer buffer = new Buffer(); String CONTENT_LENGTH = ""; try { requestBody.writeTo(buffer); CONTENT_LENGTH = String.valueOf(buffer.size()); } catch (IOException e) { e.printStackTrace(); CONTENT_LENGTH = "-1"; } finally { buffer.close(); } // リクエストオブジェクトを作る。.post() Request request = new Request.Builder() .addHeader("Content-Length", CONTENT_LENGTH).url(authUrl) .post(requestBody).build(); // クライアントオブジェクトを作る。 OkHttpClient client = null; // SSL証明書のチェック処理を無効化します。 OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); try { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[] { new MyX509TrustManager() }, new java.security.SecureRandom()); clientBuilder.sslSocketFactory(sslContext.getSocketFactory(), new MyX509TrustManager()); clientBuilder.hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); client = clientBuilder.build(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } // エラー時は標準のクライアントを使用します。 if (client == null) { client = new OkHttpClient(); } // 実行。リクエストして結果を受け取る。 try { Response response = client.newCall(request).execute(); result.response_data = response.body().string(); result.response_code = response.code(); response.close(); Log.i(TAG, "HTTP_RESPONSE_CODE=[" + result.response_code + "]"); } catch (SocketTimeoutException e) { Log.e(TAG, "接続できませんでした。", e); } catch (IOException e) { e.printStackTrace(); } }