Picassoの通信にUser-Agentヘッダを追加する

Picassoが画像をダウンロードする際のHTTPヘッダに`User-Agent`を追加したくなりました。

## picasso2-okhttp3-downloaderの導入

Jakeさんが作った[picasso2-okhttp3-downloader](https://github.com/JakeWharton/picasso2-okhttp3-downloader)を使います。

あと、ログを見たいので[logging-interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor)というのも追加しておきます。

```groovy:app/build.gradle
dependencies {

    // (省略)

    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
    implementation 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'
}
```

## 実装

このレイアウトの`imageView`にインターネットから画像をダウンロードして表示しようと思います。

```xml:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

</android.support.constraint.ConstraintLayout>
```

### 普通に通信

[公式](http://square.github.io/picasso/)のサンプル通りに実装すれば、普通に画像ダウンロードされて表示されます。

```kotlin:MainActivity.kt
package com.example.picassosample

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Picasso.get()
                .load("http://i.imgur.com/DvpvklR.png")
                .into(this.imageView)
    }
}
```

![Screenshot_1535700452.png](https://qiita-image-store.s3.amazonaws.com/0/169798/ab7d42c3-d5b6-265e-d49c-98fad1b816e5.png)

ひとまず基本的なところまではOKなようです。

### ヘッダを追加して通信

こんな感じで、Picassoのインスタンスを`Builer`経由で生成して、downloadメソッドの引数に`OkHttp3Downloader`クラスのインスタンスを渡すようにします。
この時、通信に使う`OkHttpClient`クラスに`Interceptor`を追加して、HTTP通信にヘッダをねじ込むようにしておきます。

```kotlin:MainActivity.kt
package com.example.picassosample

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.squareup.picasso.OkHttp3Downloader
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_main.*
import okhttp3.Credentials
import okhttp3.OkHttpClient

class MainActivity : AppCompatActivity() {

    private val picasso: Picasso by lazy {

        val client = OkHttpClient.Builder()
                .addInterceptor { chain ->
                    val request = chain.request().newBuilder()
                            .addHeader("User-Agent", "@sudachi808")
                            .build()
                    chain.proceed(request)
                }
                // ↓↓ログ出力用
                .addInterceptor(HttpLoggingInterceptor().apply {
                    level = HttpLoggingInterceptor.Level.HEADERS
                })
                // ↑↑ログ出力用
                .build()

        val downloader = OkHttp3Downloader(client)

        Picasso.Builder(this)
                .downloader(downloader)
                .build()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        this.picasso
                .load("http://i.imgur.com/DvpvklR.png")
                .into(this.imageView)
    }
}
```
こうすることで、User-AgentがHTTPヘッダに追加されます。

ログを見てみるとヘッダが追加されていることも分かります。

```text:logcat
08-31 16:24:12.585 14089 14134 D OkHttp  : --> GET https://i.imgur.com/DvpvklR.png
08-31 16:24:12.586 14089 14134 D OkHttp  : User-Agent: @sudachi808
08-31 16:24:12.586 14089 14134 D OkHttp  : --> END GET
```

[次回](https://qiita.com/sudachi808/items/8baf35b977d524df4895)へ続きます。