ユーザ用ツール

サイト用ツール


kotlin:okhttp

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
kotlin:okhttp [2023/04/07 14:09] – 作成 mikotokotlin:okhttp [2023/04/27 15:03] (現在) mikoto
行 20: 行 20:
 OkHttpClient().newCall(request).execute().use { response -> OkHttpClient().newCall(request).execute().use { response ->
   if (!response.isSuccessful) throw RuntimeException() // <- これはエラーハンドリング   if (!response.isSuccessful) throw RuntimeException() // <- これはエラーハンドリング
 +}
 +</code>
 +
 +===== ヘッダーの追加 =====
 +ヘッダーを追加するには''addHeader''メソッドを使用する。
 +<code>
 +val request = Request.Builder()
 +  .url("site_url")
 +  .addHeader("key", "val") // key と val を設定する
 +  .addHeader("Content-Type", "text/xml") // Content-Typeの設定の一例
 +  .build()
 +</code>
 +===== POSTメソッドの送信について =====
 +POSTメソッドを用いてアクセスするには''post()''を使用する。
 +
 +まずはリクエストボディーを作成し、それを指定してリクエストを作成する。
 +<code>
 +val request_body = "request"
 +val request = Request.Builder()
 +  .url(url)
 +  .post(request_body)
 +  .build()
 +
 +val response = OkHttpClient().newCall(request).execute()
 +</code>
 +
 +==== XMLを送信する方法 ====
 +<code kotlin>
 +import okhttp3.MediaType.Companion.toMediaType
 +import okhttp3.OkHttpClient
 +import okhttp3.Request
 +import okhttp3.RequestBody.Companion.toRequestBody
 +
 +fun function() {
 +  val xml = """
 +    <?xml version="1.0" encoding="UTF-8"?>
 +    <aaa>
 +      <bbb>val1</bbb>
 +      <ccc>val2</ccc>
 +    </aaa>
 +  """.trimIndent()
 +  
 +  val media_type = "application/xml".toMediaTypeOrNull()
 +  val request_body = xml.toRequestBody(media_type)
 +  val request = Request.Builder()
 +    .url(url)
 +    .post(request_body)
 +    .build()
 +    
 +  val response = OkHttpClient().newCall(request).execute()
 +  // 後続処理
 +}
 +</code>
 +
 +==== テキスト形式のリクエストボディーを作成する場合 ====
 +<code kotlin>
 +import okhttp3.MediaType.Companion.toMediaType
 +import okhttp3.OkHttpClient
 +import okhttp3.Request
 +import okhttp3.RequestBody.Companion.toRequestBody
 +
 +fun func() {
 +  val text = "This is a sample."
 +  val media_type = "text/plain".toMediaTypeOrNull()
 +  val request_body = text.toRequestBody(media_type)
 +  val request = Request.Builder()
 +    .url(url)
 +    .post(request_body)
 +    .build()
 +  
 +  val response = OkHttpClient().newCall(request).execute()
 +}
 +</code>
 +
 +==== JSON形式のリクエストボディーを作成する場合 ====
 +<code kotlin>
 +import okhttp3.MediaType.Companion.toMediaType
 +import okhttp3.OkHttpClient
 +import okhttp3.Request
 +import okhttp3.RequestBody.Companion.toRequestBody
 +
 +fun func() {
 +  val media_type = "application/json; charset=utf-8".toMediaType()
 +  val json = "{\"user\":\"NK\",\"text\":\"Hello\"}"
 +  val request_body = json.toRequestBody(media_type)
 +  val request = Request.Builder()
 +    .url(url)
 +    .post(request_body)
 +    .build()
 +
 +  val response = OkHttpClient().newCall(request).execute()
 } }
 </code> </code>
行 40: 行 131:
 call.timeout().timeout(60, TimeUnit.SECONDS) call.timeout().timeout(60, TimeUnit.SECONDS)
 val response = call.execute() val response = call.execute()
 +</code>
 +
 +===== エラー処理 =====
 +==== レスポンスボディーがnullの場合の処理 ====
 +<code kotlin>
 +val response = client.newCall(request).execute()
 +val responseBody = response?.body?.string()
 +
 +if (response.isSuccessful && responseBody != null) {
 +    // レスポンスボディを処理する
 +} else {
 +    // エラー処理
 +}
 </code> </code>
kotlin/okhttp.1680844177.txt.gz · 最終更新: 2023/04/07 14:09 by mikoto