如何从响应改造中获取cookie,okhttp?

问题描述 投票:6回答:3

我正在尝试通过API响应从API响应中检索Cookies值,以在后端关闭的情况下通过将cookie值设置为新的API调用来维护后端会话:

[enter image description here

RetrofitClient.java

public static Retrofit getClient() { if (checkClient()) { return getRetrofit(); } HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); CookieHandler cookieHandler = new CookieManager(); okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder().addNetworkInterceptor(interceptor) .cookieJar(new JavaNetCookieJar(cookieHandler)) .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build(); Gson gson = new GsonBuilder() .setLenient() .create(); retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .client(client) .build(); return retrofit; }

API调用

private void userLogin(String username, String password) { Retrofit retrofit = RetrofitClient.getClient(); final LoginServices loginServices = retrofit.create(LoginServices.class); Call<LoginResponse> call = loginServices.userLogin(username, password); call.enqueue(new Callback<LoginResponse>() { @Override public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { Log.d("Response code:", "===========" + response.code()); Log.d("==Cookie==1===", "==="+response.raw().request().headers().get("Cookie")); Log.d("==Cookie==2==", "==="+response.headers().get("Cookie")); Log.d("==Content-Type====", "==="+response.headers().get("Content-Type")); } @Override public void onFailure(Call<LoginResponse> call, Throwable t) { Log.e("TAG", "=======onFailure: " + t.toString()); t.printStackTrace(); // Log error here since request failed } }); }

Logcat:

Response code:: ===========200 ==Cookie==1===: ===null ==Cookie==1===: ===null ==Content-Type====: ===application/json
我还尝试了其他不适用于我的其他方法。请帮助!

我正在尝试通过关闭应用程序的情况下将cookie值设置为新的API调用来从API响应中检索Cookie值,以维护后端会话,以保持后端会话:PostMan对API调用的响应...

android cookies retrofit2 session-cookies okhttp3
3个回答
8
投票
标题名称是“ Set-Cookie”而不是“ Cookie”]

您采用的方法不正确。如果要保存Cookie,则可以创建一个拦截器并保存Cookie,并在以后随时使用时使用。


0
投票
List<String> Cookielist = response.headers().values("Set-Cookie"); String jsessionid = (Cookielist .get(0).split(";"))[0];

0
投票
尝试response.headers().get("Set-Cookie"))
© www.soinside.com 2019 - 2024. All rights reserved.