我正在使用okhttp 3.0.1.
每个我在哪里获得与okhttp2一起进行cookie处理的例子
OkHttpClient client = new OkHttpClient();
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
client.setCookieHandler(cookieManager);
Run Code Online (Sandbox Code Playgroud)
可以请一些人指导我如何在版本3中使用.在版本3中不存在setCookieHandler方法.
fra*_*iel 52
如果你想使用新的OkHttp 3 CookieJar并摆脱okhttp-urlconnection依赖关系,你可以使用这个PersistentCookieJar.
您只需要创建一个实例,PersistentCookieJar然后将其传递给OkHttp构建器:
CookieJar cookieJar =
new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
Run Code Online (Sandbox Code Playgroud)
1f7*_*1f7 34
现在我正在玩它.尝试PersistentCookieStore,为JavaNetCookieJar添加gradle依赖项:
compile "com.squareup.okhttp3:okhttp-urlconnection:3.0.0-RC1"
和init
// init cookie manager
CookieHandler cookieHandler = new CookieManager(
new PersistentCookieStore(ctx), CookiePolicy.ACCEPT_ALL);
// init okhttp 3 logger
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
// init OkHttpClient
OkHttpClient httpClient = new OkHttpClient.Builder()
.cookieJar(new JavaNetCookieJar(cookieHandler))
.addInterceptor(logging)
.build();
Run Code Online (Sandbox Code Playgroud)
`
小智 17
在这里,您可以使用一种简单的方法来创建自己的CookieJar.它可以根据需要扩展.我所做的是实现一个CookieJar并使用OkHttpClient.Builder和这个CookieJar构建OkHttpClient.
public class MyCookieJar implements CookieJar {
private List<Cookie> cookies;
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
this.cookies = cookies;
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
if (cookies != null)
return cookies;
return new ArrayList<Cookie>();
}
}
Run Code Online (Sandbox Code Playgroud)
以下是如何创建OkHttpClient的方法
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.cookieJar(new MyCookieJar());
OkHttpClient client = builder.build();
Run Code Online (Sandbox Code Playgroud)
Shu*_*ham 12
添加 compile "com.squareup.okhttp3:okhttp-urlconnection:3.8.1" 到build.gradle.
然后加入
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
OkHttpClient defaultHttpClient = new OkHttpClient.Builder()
.cookieJar(new JavaNetCookieJar(cookieManager))
.build()
Run Code Online (Sandbox Code Playgroud)
帮助我没有添加任何第三方依赖,除了来自OkHttp的依赖.
xym*_*man 11
这是OkHttp3的CookieJar实现.如果你有多个OkHttp3实例(通常你应该只有一个实例并将其用作单一实例),你应该为所有的http客户端设置相同的cookiejar实例,这样他们就可以共享cookie!此实现不是持久性cookie(它们将在应用程序重新启动时全部丢弃)但应该很容易实现SharedPreferences持久性而不是内存中的cookie列表(cookieStore).
CookieJar cookieJar = new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
};
OkHttpClient httpClient = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
Run Code Online (Sandbox Code Playgroud)
我将franmontiel PeristentCookieJar库用于 okhttp3 和 retrofit.2。这种方法的好处是:不需要操纵您的 okhttp 请求。创建改造时只需设置 cookie 或会话
1. 首先将此添加到您的 build.gradle(projectname) allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
Run Code Online (Sandbox Code Playgroud)
2. 将此添加到您的 build.gradle
compile 'com.github.franmontiel:PersistentCookieJar:v1.0.1'
Run Code Online (Sandbox Code Playgroud)
3. 像这样构建改造
public static Retrofit getClient(Context context) {
ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
}
return retrofit;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51577 次 |
| 最近记录: |