【问题标题】:how to handle cookies for okhttpclient requests如何处理 okhttpclient 请求的 cookie
【发布时间】:2020-06-04 16:41:51
【问题描述】:

我正在使用 OkHttpClient 向网站网页的 url 发送请求,并通过以下方法存储它提供的 cookie,该方法仅从 stackoverflow 获得。

CookieManager cookieManager = new CookieManager();
cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this));
OkHttpClient client = new OkHttpClient.Builder()
                .cookieJar(cookieJar)
                .build();
Request request = new Request.Builder()
                .url("www.example.com/homePage")
                .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0")
                .build();

必须存储cookie,否则网站会将请求重定向到超时页面。

然后,我查看页面的 html 以检查我是否到达了正确的 URL。

client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
                textView.setText("Failed to get response");
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if(response.isSuccessful()){
                    //String myResponse contains the html of the webpage 
                    final String myResponse = response.body().string();
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(myResponse);
                        }
                    });
                }
            }
        });

现在,我以与 URL“www.example.com/loginPage”类似的方式创建另一个请求变量并尝试查看 html,但它会将我重定向到超时页面,因为请求是在没有发送 cookie 的情况下发出的我是从主页上得到的。

因此,简而言之,我如何从“www.example.com/cookieProviderPage”获取 cookie 并将其存储,然后将该 cookie 用于对该网站所有页面的所有进一步请求。该网站的页面具有不同的 URL,例如“www.example.com/cookieRequiredPage1”、“www.example.com/cookieRequiredPage2”等。

附: - 我已经检查了许多与 cookie 相关的 stackoverflow 问题,但我无法针对我的情况专门实施它们。

【问题讨论】:

    标签: android cookies session-cookies okhttp


    【解决方案1】:

    使用命令添加的 Cookie

    new OkHttpClient.Builder()
      .cookieJar(cookieJar)
    

    根据CookieJar.loadForRequest 方法加载。您必须检查您的接口CookieJar 的实现如何实现loadForRequest 方法。如果只是为与 cookie 最初来自的完全相同的 url 加载 cookie,则会出现错误。 如果 cookie 来自“www.example.com/cookieProviderPage”并且您想为请求“www.example.com/loginPage”提供 cookie,那么您的 CookieJar 实现可能只为带有 url 的请求提供 cookie” www.example.com/cookieProviderPage”。 例如,如果使用Cookie.matches 来获取请求的cookie,就是这种情况。 Cookie.matches比较域名和url的路径。

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 2020-11-14
      • 2017-01-19
      • 1970-01-01
      相关资源
      最近更新 更多