0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-31

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

picasso2-okhttp3-downloaderの導入

Jakeさんが作ったpicasso2-okhttp3-downloaderを使います。

あと、ログを見たいのでlogging-interceptorというのも追加しておきます。

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にインターネットから画像をダウンロードして表示しようと思います。

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>

普通に通信

公式のサンプル通りに実装すれば、普通に画像ダウンロードされて表示されます。

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

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

ヘッダを追加して通信

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

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ヘッダに追加されます。

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

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

次回へ続きます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?