Итак, в настоящее время настроено мое приложение:
1.) Вход в систему. 2.) После входа в систему могут быть запущены другие действия, в которых используются скрипты PHP, для которых требуются файлы cookie, отправленные при входе в систему.
Я использую один HttpClient в своем приложении, чтобы убедиться, что используются одни и те же файлы cookie, но моя проблема заключается в том, что я получаю 2 из 3 cookie файлов. Я не забочусь о действительности файлов cookie, но мне нужно, чтобы они были приняты. Я попытался настроить 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, чтобы просто получить строку ответа. Ничего необычного.
Я понимаю, что причина, по которой отклоняются мои файлы cookie, связана с "атрибутом незаконного пути" (я запускаю script в /mobile -api/login.php, тогда как файл cookie будет возвращаться с помощью пути только "/" для trackallthethings), но я хотел бы принять cookies в любом случае. Есть ли способ сделать это?
Проблема, с которой вы сталкиваетесь, по-видимому, разработана для обеспечения конфиденциальности/безопасности. В общем, любому ресурсу не разрешено устанавливать cookie, который он не сможет получить. Здесь вы пытаетесь установить cookie с помощью пути trackallthethings
из ресурса /mobile-api/login.php
, который, очевидно, не работает.
Здесь у вас есть следующие две опции:
'/'
) ИЛИНадеюсь, что это поможет.
Поскольку API HttpClient
, похоже, очень быстро меняется, вот пример кода рабочего кода для 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();
Invalid 'expires' attribute
исключение Invalid 'expires' attribute
для некоторых токенов авторизации, которые я предоставляю при использовании простого класса Java Date. Sat, 16-Sep-2017 20:06:21 GMT
> работает Fri, 24 Mar 2017 20:46:08 GMT
> не работает