Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过HttpClient接受所有cookie_Java_Android_Cookies_Httpclient - Fatal编程技术网

Java 通过HttpClient接受所有cookie

Java 通过HttpClient接受所有cookie,java,android,cookies,httpclient,Java,Android,Cookies,Httpclient,这就是我的应用程序当前的设置方式: 1.)登录活动。 2.)登录后,可能会启动使用PHP脚本的其他活动,这些脚本需要通过登录发送cookie 我在我的应用程序中使用一个HttpClient来确保使用相同的cookies,但我的问题是,我的3个cookies中有2个被拒绝。我不在乎这些饼干的有效性,但我需要它们被接受,但这也不起作用。这就是logcat所说的: 11-26 10:33:57.613: WARN/ResponseProcessCookies(271): Cookie rejected

这就是我的应用程序当前的设置方式:

1.)登录活动。 2.)登录后,可能会启动使用PHP脚本的其他活动,这些脚本需要通过登录发送cookie

我在我的应用程序中使用一个HttpClient来确保使用相同的cookies,但我的问题是,我的3个cookies中有2个被拒绝。我不在乎这些饼干的有效性,但我需要它们被接受,但这也不起作用。这就是logcat所说的:

11-26 10:33:57.613: WARN/ResponseProcessCookies(271): Cookie rejected: "[version: 0]      [name: cookie_user_id][value: 1][domain: www.trackallthethings.com][path: trackallthethings][expiry: Sun Nov 25 11:33:00 CST 2012]". Illegal path attribute "trackallthethings". Path of origin: "/mobile-api/login.php"

11-26 10:33:57.593: WARN/ResponseProcessCookies(271): Cookie rejected: "[version: 0][name: cookie_session_id][value: 1985208971][domain: www.trackallthethings.com][path: trackallthethings][expiry: Sun Nov 25 11:33:00 CST 2012]". Illegal path attribute "trackallthethings". Path of origin: "/mobile-api/login.php"
我确信我的实际代码是正确的(我的应用程序仍然正确登录,只是不接受前面提到的cookies),但不管怎么说,这里是:

HttpGet httpget = new HttpGet(//MY URL);
HttpResponse response;
response = Main.httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
InputStream in = entity.getContent();

BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
从这里,我使用StringBuilder简单地获取响应的字符串。没什么特别的


我知道我的cookie被拒绝的原因是因为“非法路径属性”(我在/mobile api/login.php上运行一个脚本,而cookie返回的路径仅为“/”,用于跟踪所有内容),但我无论如何都愿意接受cookie。有办法做到这一点吗?

您面临的问题似乎是出于隐私/安全目的而设计的。通常,不允许任何资源设置它将无法接收的cookie。在这里,您试图使用路径
来设置cookie,该路径跟踪资源
/mobile api/login.php
中的所有内容,但显然不起作用

这里有以下两个选项

  • 使用两个资源都可以访问的路径设置cookie(这可能是root
    “/”
    )或
  • 定义自定义cookie策略并注册您自己的cookie支持。这里是和
    希望这能有所帮助。

    您所面临的问题似乎是出于隐私/安全目的而设计的。通常,不允许任何资源设置它将无法接收的cookie。在这里,您试图使用路径
    来设置cookie,该路径跟踪资源
    /mobile api/login.php
    中的所有内容,但显然不起作用

    这里有以下两个选项

  • 使用两个资源都可以访问的路径设置cookie(这可能是root
    “/”
    )或
  • 定义自定义cookie策略并注册您自己的cookie支持。这里是和
    希望这能有所帮助。

    由于
    HttpClient
    的API似乎变化非常快,下面是
    HttpClient 4.5.1
    的一些工作示例代码,以允许所有(格式错误)cookie:

    class EasyCookieSpec扩展了DefaultCookieSpec{
    @凌驾
    public void validate(Cookie arg0,CookieOrigin arg1)引发格式错误的CookieException{
    //允许所有cookie
    }
    }
    类EasySpecProvider实现CookieSpecProvider{
    @凌驾
    公共CookieSpec创建(HttpContext上下文){
    返回新的EasyCookieSpec();
    }
    }
    注册表r=RegistryBuilder.create()
    .register(“easy”,新的EasySpecProvider())
    .build();
    CookieStore CookieStore=新的BasicCookieStore();
    RequestConfig RequestConfig=RequestConfig.custom()
    .setCookieSpec(“简单”)
    .build();
    CloseableHttpClient httpclient=HttpClients.custom()
    .setDefaultCookieStore(cookieStore)
    .SetDefaultCookiesSpecRegistry(r)
    .setDefaultRequestConfig(requestConfig)
    .build();
    
    由于
    HttpClient
    的API似乎变化非常快,下面是
    HttpClient 4.5.1
    的一些工作示例代码,以允许所有(格式错误)cookie:

    class EasyCookieSpec扩展了DefaultCookieSpec{
    @凌驾
    public void validate(Cookie arg0,CookieOrigin arg1)引发格式错误的CookieException{
    //允许所有cookie
    }
    }
    类EasySpecProvider实现CookieSpecProvider{
    @凌驾
    公共CookieSpec创建(HttpContext上下文){
    返回新的EasyCookieSpec();
    }
    }
    注册表r=RegistryBuilder.create()
    .register(“easy”,新的EasySpecProvider())
    .build();
    CookieStore CookieStore=新的BasicCookieStore();
    RequestConfig RequestConfig=RequestConfig.custom()
    .setCookieSpec(“简单”)
    .build();
    CloseableHttpClient httpclient=HttpClients.custom()
    .setDefaultCookieStore(cookieStore)
    .SetDefaultCookiesSpecRegistry(r)
    .setDefaultRequestConfig(requestConfig)
    .build();
    
    这绝对是正确答案。我以为我做错了什么,但结果发现我的项目合作伙伴正在分发路径不正确的cookies.:-)这绝对是正确的答案。我以为我做错了什么,但结果发现我的项目合作伙伴正在分发路径不正确的cookies.:-)我遇到了这个代码的问题。它似乎不允许所有格式错误的cookies。例如,在使用简单的Java日期类时,我看到我提供的一些身份验证令牌出现了
    无效的'expires'属性
    异常<代码>Sat,2017年9月16日20:06:21 GMT
  • >有效
    2017年3月24日星期五20:46:08 GMT
    >无效我遇到此代码的问题。它似乎不允许所有格式错误的cookies。例如,在使用简单的Java日期类时,我看到我提供的一些身份验证令牌出现了
    无效的'expires'属性
    异常<代码>Sat,2017年9月16日20:06:21 GMT
  • >有效
    2017年3月24日星期五20:46:08 GMT
    >无效
    class EasyCookieSpec extends DefaultCookieSpec {
        @Override
        public void validate(Cookie arg0, CookieOrigin arg1) throws MalformedCookieException {
            //allow all cookies 
        }
    }
    
    class EasySpecProvider implements CookieSpecProvider {
        @Override
        public CookieSpec create(HttpContext context) {
            return new EasyCookieSpec();
        }
    }
    
    Registry<CookieSpecProvider> r = RegistryBuilder.<CookieSpecProvider>create()
                .register("easy", new EasySpecProvider())
                .build();
    
    CookieStore cookieStore = new BasicCookieStore();
    
    RequestConfig requestConfig = RequestConfig.custom()
                .setCookieSpec("easy")
                .build();
    
    CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCookieStore(cookieStore)
                .setDefaultCookieSpecRegistry(r)
                .setDefaultRequestConfig(requestConfig)
                .build();