java - 如何使用 Android 版 Picasso 设置 cookie?

标签 java android picasso

我尝试设置使用 Picasso 请求图像时发送的 cookie,但它似乎没有通过监视网络的 HTTP header 来发送任何 cookie。

我构建了一个 Picasso 实例,如下所示,并尝试使用 HttpURLConnection 作为下载器并使用 cookieSyncManager 设置 cookie。

我可能做错了什么?

Builder picassoBuilder = new Picasso.Builder(this);
Downloader downloader = new UrlConnectionDownloader(this);
picassoBuilder.downloader(downloader);

Picasso picasso = picassoBuilder.build();

CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();

cookieManager.setCookie("http://example.com/", "key=value");
cookieSyncManager.sync();

picasso.with(this).load("http://example.com/image.php?image=test.png").into(imageView);

最佳答案

我终于成功地使用 OkHttp 和 OkHttp3Downloader 做到了这一点。 您需要使用拦截器,然后在请求中设置cookie( ref )。另外,您需要手动设置缓存,因为(在某些情况下)当您使用自定义下载器时不起作用( ref )

OkHttpClient client = new OkHttpClient()
    .newBuilder()
    .addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            final Request original = chain.request();

            final Request authorized = original.newBuilder()
                    .addHeader("Cookie", CookieManager.getInstance().getCookie(yourUrl))
                    .addHeader("User-Agent", yourUserAgent)
                    .build();

            return chain.proceed(authorized);
        }
    })
    .cache(new Cache(context.getCacheDir(), 25 * 1024 * 1024))
    .build();



Picasso picasso = new Picasso.Builder(context)
                  .downloader(new OkHttp3Downloader(client))
                  .memoryCache(new LruCache(context))
                  .build();

picasso.load(yourUrlImage).into(yourView);

依赖

compile 'com.squareup.okhttp3:okhttp:3.8.1'
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'

关于java - 如何使用 Android 版 Picasso 设置 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209111/

相关文章:

android - picasso 没有从画廊加载图像

java - 静态和动态类型

java - 这段代码的目的是什么?它只是复制一个日期吗?

Android位图解码进度

java - 使用 GSON 序列化对象

android - 在 Espresso 中监控 Picasso 的 IdlingResource

java - 使用 Maven 使用注释 @Tag ("name_test") 过滤 JUnit 5 测试用例

java - LDAP 类型的数据源 url 是什么

Android float 按钮未出现在视频上方

android - RecyclerView 的图像遮挡了 UI