所以这是我的应用程序的设置方式:
1。)登录活动。 2.)登录后,可能会启动使用需要登录时发送的cookie的PHP脚本的其他活动。
我在我的应用程序中使用一个HttpClient来确保使用相同的cookie,但我的问题是我收到了3个cookie中的2个被拒绝。我不关心cookie的有效性,但我确实需要它们被接受。 I tried setting the CookiePolicy,但这也没有奏效。这就是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"
我确信我的实际代码是正确的(我的应用程序仍然正确登录,只是不接受上述cookie),但无论如何它在这里:
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来获取响应的String。没什么好看的。
我理解我的cookie被拒绝的原因是因为“非法路径属性”(我在/mobile-api/login.php运行脚本,而cookie将以“/”的路径返回对于trackallthethings),但无论如何我想接受cookie。有没有办法做到这一点?
答案 0 :(得分:7)
您面临的问题似乎是出于隐私/安全目的而设计的。通常,不允许任何资源设置它将无法接收的cookie。在这里,您尝试使用资源trackallthethings
中的/mobile-api/login.php
路径设置Cookie,这显然无效。
这里有以下两个选项
'/'
)或希望这有帮助。
答案 1 :(得分:2)
由于HttpClient
的API似乎变化非常快,因此以下是HttpClient 4.5.1
的一些工作示例代码,以允许所有(格式错误的)Cookie:
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();