相关疑难解决方法(0)

如何在Android上使用Cookie发出http请求?

我想在正确处理cookie的同时向远程服务器发出http请求(例如,存储服务器发送的cookie,并在我发出后续请求时发送这些cookie).保留任何和所有cookie都很好,但实际上我唯一关心的是会话cookie.

使用java.net,似乎首选的方法是使用java.net.CookieHandler(抽象基类)和java.net.CookieManager(具体实现).Android有java.net.CookieHandler,但它似乎没有java.net.CookieManager.

我可以通过检查http标头手动编写所有代码,但似乎必须有一个更简单的方法.

在保留cookie的同时在Android上发出http请求的正确方法是什么?

java cookies url android http

116
推荐指数
3
解决办法
11万
查看次数

VM广泛的cookie管理意味着什么?

我正在学习cookies在Android中存储并遇到了几种实现它的方法.其中一个是使用CookieManager and CookieStore.

当我浏览Android文档时,我发现了以下声明:

为了在客户端和服务器之间建立和维护可能长期存在的会话,HttpURLConnection包括一个可扩展的cookie管理器.使用CookieHandler和CookieManager启用VM范围的cookie管理:

CookieManager cookieManager = new CookieManager();  
CookieHandler.setDefault(cookieManager);
Run Code Online (Sandbox Code Playgroud)

我不明白的意思VM-wide cookie management.我知道VM意味着Virtual Machine.

我的解释:

  1. 我解释它的一种方法是,创建CookieManager并传递它以setDefault()使其在整个应用程序中可用.因此,我尝试了以下测试.

     URL url = new URL("http://something.com");
     URI uri=new URI("http://something.com");
     urlConnection = (HttpURLConnection) url.openConnection();
     cks=urlConnection.getHeaderField("Set-Cookie");  
     //cks is a String
     cookieManager=new CookieManager();
     CookieHandler.setDefault(cookieManager);
     HttpCookie hc=new HttpCookie("Cookie1",cks);
     cookieManager.getCookieStore().add(uri,hc);
     cks1=cookieManager.getCookieStore().getCookies().get(0).getValue();
     //cks1 is another String
    
    Run Code Online (Sandbox Code Playgroud)

    我设置cks and cks1TextViews并按content/value预期打印cookie .根据我的解释,我尝试cookieManager.getCookieStore().getCookies().get(0).getValue();了另一个活动,但它没有识别出对象,这意味着它超出了范围而且无法访问.此外,创建了一个新的,CookieManager并尝试获取cookie,但它返回null.因此,我假设可以跨活动访问VM范围的这种解释是不正确的.

  2. 第二个解释是Cookies将在CookieManager设置时自动存储.我从SO的另一个问题的解决方案中得到了它:使用Java URLConnection进行Cookie管理

解决方案中的一个陈述如下: …

cookies android httpurlconnection android-cookiemanager android-sharedpreferences

8
推荐指数
1
解决办法
227
查看次数

CookieManager用于多个线程

我试图通过线程建立多个连接.

但是每个连接似乎都会覆盖其他连接,导致连接使用错误的cookie.

在线程类的构造函数内:

    manager = new CookieManager();
    manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
    CookieHandler.setDefault(manager);
Run Code Online (Sandbox Code Playgroud)

有没有办法管理每个线程或每个类的cookie?

新的失败尝试:

现在每个线程都使用它自己的索引,但它们似乎仍然以cookie方式覆盖彼此.有任何想法吗?

public class threadedCookieStore implements CookieStore, Runnable {
    CookieStore[] store = new CookieStore[1000];
    int index;

    public threadedCookieStore(int new_index) {
        index = new_index;
        // get the default in memory cookie store
        store[index] = new CookieManager().getCookieStore();


        // todo: read in cookies from persistant storage
        // and add them store

        // add a shutdown hook to write out the in memory cookies
        Runtime.getRuntime().addShutdownHook(new Thread(this)); 
    }

    public void run() {
        // todo: write …
Run Code Online (Sandbox Code Playgroud)

java cookies https http httpcookie

5
推荐指数
2
解决办法
8307
查看次数

使用来自 webview 的 cookie 执行 HTTP 请求

我有这个场景,我的应用程序在 webView 中显示了一个 2 页的登录过程。

第一页仅询问您计划连接到哪个域。第二页要求提供凭据。

我正在尝试在 webView 中执行登录,然后从我的本机代码执行请求。我意识到我需要从 webView 获取存储的 cookie(但是从哪个 url?从第一页还是第二页?),然后将 cookie 用于本机代码请求。

有人可以告诉我该怎么做吗?登录过程很简单——用户通过 webview 登录——很好。现在,我知道如何使用 cookie 管理,但我不知道我应该寻找哪个 cookie - 它是第一个登录页面的 url 吗?是第二个吗?有关系吗?

接下来,如何使用 cookie 将 GET 请求发送回服务器,以便服务器知道我已通过身份验证?

我很感激我一无所知并寻求帮助的答案:)

cookies android webview http-request

2
推荐指数
2
解决办法
6534
查看次数

如何在android中使用HttpUrlConnection类将cookie添加到url?

我正在尝试从 url 解析 json 数据,当我尝试创建连接时,它抛出异常 java.net.ProtocolException: cannot write request body after response has been read

我收到的响应消息为Not found

我在网络浏览器中检查了 url,当我用我的凭据登录时,它显示了 Json 数据。

所以,我发现我需要将 cookie 添加到我的连接中,但我不知道该怎么做。

    public void parseData(String cookie){
    HttpUrlConnection connection;

    try{
    URL url = new URL(params[0]);
                    connection = (HttpURLConnection) url.openConnection();

                    connection.setRequestProperty("Cookie", cookie);
                    Log.e(TAG, "cookie " + cookie);

                    connection.setDoOutput(true);
                    connection.setDoInput(true);
                    connection.setRequestMethod("GET");

                    connection.connect();
Log.e(TAG,connection.getResponseMessage());

    /**
    here i'm trying to parse the data 
    using BufferedReader calss
    **/

    }
    catch(IOException e){}
    }
Run Code Online (Sandbox Code Playgroud)

我需要在连接中添加 cookie。请帮我解决这个问题。

cookies android json

1
推荐指数
1
解决办法
2万
查看次数