Java 通过HttpClient接受所有cookie
这就是我的应用程序当前的设置方式: 1.)登录活动。 2.)登录后,可能会启动使用PHP脚本的其他活动,这些脚本需要通过登录发送cookie 我在我的应用程序中使用一个HttpClient来确保使用相同的cookies,但我的问题是,我的3个cookies中有2个被拒绝。我不在乎这些饼干的有效性,但我需要它们被接受,但这也不起作用。这就是logcat所说的: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
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();