Mic*_*l A 12 android okhttp okhttp3
所以我开始使用Okhttp 3,网上的大多数例子都是关于旧版本的
我需要在OkHttp客户端请求中添加一个cookie,如何用OkHttp 3完成?
在我的情况下,我只是想静态地将它添加到客户端调用而不从服务器接收它
Tud*_*uca 20
有两种方法可以做到这一点:
OkHttpClient client = new OkHttpClient().newBuilder()
.cookieJar(new CookieJar() {
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
final ArrayList<Cookie> oneCookie = new ArrayList<>(1);
oneCookie.add(createNonPersistentCookie());
return oneCookie;
}
})
.build();
...
public static Cookie createNonPersistentCookie() {
return new Cookie.Builder()
.domain("publicobject.com")
.path("/")
.name("cookie-name")
.value("cookie-value")
.httpOnly()
.secure()
.build();
}
Run Code Online (Sandbox Code Playgroud)
或者干脆
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", "cookie-name=cookie-value")
.build();
return chain.proceed(authorized);
}
})
.build();
Run Code Online (Sandbox Code Playgroud)
我觉得第二个建议是你需要的.
你可以在这里找到一个有效的例子.
rci*_*ati 10
如果您需要为单个请求设置cookie,您只需添加标头:
Request request = new Request.Builder()
.addHeader("Cookie", "yourcookie")
.url("http://yoursite.com")
.build();
Run Code Online (Sandbox Code Playgroud)
否则,如果您想要读取服务器返回的cookie并将它们附加到其他请求,您将需要一个CookieJar.对于Android,您可以使用PersistentCookieJar库来正确处理cookie,并将它们保存在共享首选项中:
ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(context));
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.build();
Run Code Online (Sandbox Code Playgroud)
我有同样的需求,我制作了自己的图书馆。您可以在https://github.com/riversun/okhttp3-cookie-helper上使用 OkHttp3CookieHelper强制设置这样的 cookie 。
String url = "https://example.com/webapi";
OkHttp3CookieHelper cookieHelper = new OkHttp3CookieHelper();
cookieHelper.setCookie(url, "cookie_name", "cookie_value");
OkHttpClient client = new OkHttpClient.Builder()
.cookieJar(cookieHelper.cookieJar())
.build();
Request request = new Request.Builder()
.url(url)
.build();
Run Code Online (Sandbox Code Playgroud)
摇篮
compile 'org.riversun:okhttp3-cookie-helper:1.0.0'
Run Code Online (Sandbox Code Playgroud)
马文
<dependency>
<groupId>org.riversun</groupId>
<artifactId>okhttp3-cookie-helper</artifactId>
<version>1.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26048 次 |
| 最近记录: |