読者です 読者をやめる 読者になる 読者になる

【Android】Content-Type

Android

 

Content-Type

HTMLやJavaScriptなどWeb系のみなさんには同じみかもしれませんが。。

Android開発でも意識することはあります。

HTTP通信が発生するアプリをつくるときですね。

 

 

そもそもContent-Typeとは

ファイルやデータのタイプのことです。

「ファイルのタイプ(メイン/サブ)」の形式で記述します。

・text/plain  ※テキストファイル
・text/html   ※HTMLファイル
・image/jpeg  ※JPEGファイル

などはよく目にしていると思います。

 

-----------------------------------------------------------------------------------------------------

以前、Microsoft Translator API を使うときに

アクセストークンを取得する必要があって、

 

String body =
  String.format("grant_type=%s&client_id=%s&client_secret=%s&scope=%s",
    URLEncoder.encode(grant_type, "UTF-8"),
    URLEncoder.encode(client_id, "UTF-8"),
    URLEncoder.encode(client_secret, "UTF-8"),
    URLEncoder.encode(scope, "UTF-8"));
RequestBody requestBody = RequestBody.create(
  MediaType.parse("application/x-www-form-urlencoded"), body
);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(ACCESS_URI).post(requestBody).build();
Response response = client.newCall(request).execute();

 

のように「application/x-www-form-urlencoded」をリクエストボディに指定しました。というかそのほかの指定ではアクセスエラーになってしまい、

application/x-www-form-urlencoded」を使う必要がありました。

 

 

そこであらためて以下をちゃんと調べてみました。

application/x-www-form-urlencoded
データはid=dataの形式でformが複数ある場合form1=data1&form2=data2
dataはURLエンコードされる
・英数字と3種類の記号 _ . - はそのまま
・スペースは+に変換
・それ以外の文字は%xxの16進形式

 

Microsoft Translator API」が application/x-www-form-urlencoded形式

のアクセス手段をもとめていたということなんでしょうが、

Microsoft Translator API」のドキュメントにはとくに記述がないので、

解決に少し手間取ってしまいました。

ふだんちゃんと理解して意識していないと、なかなかこれがでてこない。。。

 

 

ついでに、これまたたまにみかける

multipart/form-data」について調べてみました。

・ファイル送信する場合に使用することが多い

・ファイルはサイズが大きい場合が多いのでURLエンコードで無理

・そのためマルチパートデータとしてファイルを送る

 

 

以上です。

 

 

 

広告を非表示にする