当前位置: 首页 > 知识库问答 >
问题:

如何处理okhttpclient请求的Cookie

司空浩邈
2023-03-14

我正在使用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来检查我是否到达了正确的网址。

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);
                        }
                    });
                }
            }
        });

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

所以,简而言之,我如何从“www.example.com/cookieProviderPage”获得一个cookie并存储它,然后将该cookie用于该网站所有页面的所有进一步请求。该网站的页面有不同的网址,如“www.example.com/cookieRequiredPage1”、“www.example.com/cookieRequiredPage2”等。

另外,我已经检查了许多与cookie相关的问题,但我无法将它们具体应用到我的案例中。

共有1个答案

傅越
2023-03-14

添加了命令的Cookies

new OkHttpClient.Builder()
  .cookieJar(cookieJar)

根据CookieJar.loadForRequest方法加载。您必须检查您的接口CookieJar的实现是如何实现loadForRequest方法的。如果只是为与Cookie最初来自的URL完全相同的URL加载Cookie,则会出错。如果Cookie来自www.example.com/cookieProviderPage,并且您希望为请求www.example.com/loginPage提供Cookie,则您的CookieJar实现只能向具有urlwww.example.com/cookieProviderPage的请求提供Cookie。例如,如果Cookie.matches用于获取请求的cookie,则会出现这种情况。

 类似资料:
  • 我有一个在数据库上运行查询的API。由于查询执行时间可能很长,比如3分钟到10分钟,我的负载平衡器返回“上游请求超时”,但我可以看到查询已提交到数据源,但对最终用户来说,它显示了错误的消息。如何应对这种情况? 我的职能

  • 问题内容: 我正在制作一个Java Servlet页面,该页面检查域名列表,并通过jquery ajax请求检查每个名称。它的工作正常,除非结果被无序附加到DOM。什么是按请求的顺序处理请求的最佳方法,但是又像长时间轮询一样异步进行。我是javascript新手。 这是我用于请求的代码: 我当时正在考虑向Java Servlet发送一个序列号,该序列号将通过JSON返回,但是我想知道是否有更简单的

  • 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求。让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始: server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_nam

  • 请求处理 fpm_run()执行后将fork出worker进程,worker进程返回main()中继续向下执行,后面的流程就是worker进程不断accept请求,然后执行PHP脚本并返回。整体流程如下: (1)等待请求: worker进程阻塞在fcgi_accept_request()等待请求; (2)解析请求: fastcgi请求到达后被worker接收,然后开始接收并解析请求数据,直到req

  • 问题内容: 我试图打开登录页面(GET),获取网络服务器提供的cookie,然后提交用户名和密码对以登录网站(POST)。 看着这个Stackoverflow问题/答案,我认为我会做以下事情: 但是,标头中有一个,但该对象中没有改变。实际上,链接问题的回答将表明没有内容被填充。 我在代码中通过使用标头字典来解决此问题,并在执行GET或POST之后使用此标头处理: 然后在请求方法中传递标头。这是正确

  • 问题内容: 我需要按以下方式处理请求: 它应该接受介于和之间的值中的任何类型的字符?。请注意,将位于的值将是一个值,而不是操作的名称。 例如:其中第一个请求应将用户重定向到页面(因为那是名称),第二个请求应将用户lkikf连同参数名称的值一起重定向到页面。 我有下面的控制器来处理它,但是问题是当我的地址中有/时,控制器无法处理它。 我用下面的正则表达式不起作用。 问题答案: 你必须创建两个方法,然