okhttp获取接口响应中的Session

有的时候服务端要完成一个功能会提供我们多个接口,服务端在第一个接口中保存了一个session,在后续接口中服务端会用这个sessionid获取一些数据完成后续逻辑。
但是有的时候从android端调用的接口,服务端获取不到Session,ios、h5都可以就你不行,他就会让你看看是咋回事呢?

这种情况就需要我们手动操作一下了:我们先从第一个接口的response中获取到session保存下来,服务端那个接口需要我们就在header中设置cookie给他把session手动传过去就行了。这里是okhttp的

1、从Cookie头中获取到session

 public  String requestGet(String urlString){
        Request request = new Request.Builder().url(urlString).build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            //获取session的操作,session放在cookie头,且取出后含有“;”,要处理一下
            Headers headers = response.headers();
            List<String> cookies = headers.values("Set-Cookie");
            String s = cookies.get(0);
            session = s.substring(0, s.indexOf(";"));
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

2.服务端哪一个接口需要给他设置Cookie把Session设置上

        Request request = new Request
                .Builder()
                .addHeader("cookie",session)
                .post(requestBody)
                .url(urlString)
                .build();

这样服务端就能获取到了session了。

你可能感兴趣的:(Android日常开发)