[英]How can I set cookies using Picasso for Android?
我尝试过设置使用Picasso请求图像时要发送的cookie,但它似乎没有通过监视网络中的HTTP标头来发送任何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做到了这一点。 您需要使用拦截器,然后在请求( ref )中设置cookie。 另外,您还需要手动设置缓存,因为(在某些情况下)使用自定义下载器( 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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.