Я был через различные учебные руководства и этот веб-сайт, но не мог найти надлежащее решение. С другой стороны, я видел, что приложения входят в веб-сайты и запрашивают дополнительные сведения, таким образом, я уверен, что существует способ получить эту работу, но возможно мой подход неправилен.
Вот то, что я пытаюсь сделать: Я хочу войти в веб-сайт, которому нужна аутентификация пользователя, и затем считайте и проанализируйте веб-сайты, которые только доступны, если пользователь зарегистрирован. Проблема: после РЕГИСТРАЦИИ учетных данных к веб-сайту я получаю cookie, который, кажется, не сохраняется в моем HttpClient, даже при том, что документы предполагают, что точно, который должен произойти.
Вот часть моего кода:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(LOGIN_URL);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair(USER_FIELD, login));
nvps.add(new BasicNameValuePair(PASS_FIELD, pw));
nvps.add(new BasicNameValuePair(REMEMBERME, "on"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = httpclient.execute(httpost);
HttpEntity entity = response.getEntity();
if (entity != null) {
entity.consumeContent();
}
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
Когда я произвел содержание "cookie", все кажется прекрасным (я получаю сессию):
- [version: 0][name: ASP.NET_SessionId][value: xxx][domain: xxx][path: /][expiry: null]
Как я понял, cookie/сессия будет сохраняться и использоваться в моем HttpClient, пока я не закрываю его.
Читая следующую страницу (который ограничивается), с помощью этого кода:
HttpGet httpget2 = new HttpGet(RESTRICTED_URL);
response = httpclient.execute(httpget2);
entity = response.getEntity();
InputStream data = entity.getContent();
// data will be parsed here
if (entity != null) {
entity.consumeContent();
}
// connection will be closed afterwards
Если я произвел ответ ПОЛУЧАТЬ-ЗАПРОСА (использование response.getStatusLine()
) Я получаю "200 хорошо" сообщений, но парсинг сайта, который возвращается шоу, что вход в систему потерян (я только получаю форму входа в систему).
Любая справка ценится.
Если предположить, что ваш объект httpclient
одинаков в обоих случаях, и если предположить, что RESTRICTED_URL
находится в том же домене, что и LOGIN_URL
, то я думаю, что то, что у вас есть, должно работать.
Возможно, вы захотите использовать Wireshark или прокси-сервер или что-то еще для изучения HTTP-запросов, которые вы делаете, чтобы увидеть, действительно ли cookie прикрепляется к запросу. Может оказаться, что cookie прикрепляется, и в этом случае есть что-то еще, что вызывает отказ второго запроса.