マルチパートの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();
}
}




