Как установить Cookie в Http, Получают метод с помощью Java

Я хочу сделать, руководство ДОБИРАЕТСЯ с cookie, чтобы загрузить и проанализировать веб-страницу. Я должен извлечь маркер безопасности для создания сообщения на форуме. Я завершил вход в систему, считал ответ и извлек cookie (3 пары (имя, значение)). Я затем записал Строку, содержащую cookie как это:

CookieString="name1=value1; name2=value2; name3=value3"

Я затем делаю следующее

HttpURLConnection connection
connection = (HttpURLConnection)(new URL(Link).openConnection());
connection.setRequestMethod("GET");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Cookie", CookieString );
connection.connect();

Я затем прочитал страницу, но она показывает, что я не зарегистрирован на форуме. Что я делаю неправильно?

править: Я знаю, что должен извлечь маркер безопасности, если я хочу сделать сообщение. Мой ход мыслей был то, что для извлечения его, я должен ПОЛУЧИТЬ эту конкретную страницу. Но чтобы маркер безопасности был как скрытое поле, я должен быть онлайн, таким образом мне были нужны cookie. Но когда я ПОЛУЧАЮ страницу, и я установил cookie, как упомянуто выше, я получаю страницу как, гость, она показывает, что я не онлайн, и значение маркера безопасности является гостем, который не полезен для меня. Я проверю ссылку, которую Вы дали мне и надо надеяться найдете решение.

16
задан Neuron 6 February 2019 в 01:18
поделиться

2 ответа

Предполагая, что значения cookie не жестко запрограммированы, а получены из предыдущего запроса, вероятно, проще всего использовать класс CookieHandler .

CookieHandler.setDefault(new CookieManager());

Тогда ваш HttpURLConnection автоматически сохранит все полученные файлы cookie и отправит их обратно со следующим запросом на тот же хост.

6
ответ дан 30 November 2019 в 22:17
поделиться

Чтобы быть уверенным, вы должны собирать куки из Set-Cookie заголовков ответа. Чтобы отправить их обратно в последующих запросах, вы должны установить их по одному, используя URLConnection#addRequestProperty().

По существу:

// ...

// Grab Set-Cookie headers:
List<String> cookies = connection.getHeaderFields().get("Set-Cookie");

// ...

// Send them back in subsequent requests:
for (String cookie : cookies) {
    connection.addRequestProperty("Cookie", cookie.split(";", 2)[0]);
}

// ...

split(";", 2) служит для того, чтобы избавиться от атрибутов cookie, которые не имеют значения для серверной стороны, таких как expires, path и т.д.

Для более удобного HTTP клиента я бы предложил взглянуть на Apache HttpComponents Client. Он может обрабатывать все куки более прозрачно.

См. также:


Обновление: согласно комментариям, это не проблема с куками. Неверный токен запроса означает, что сервер имеет встроенную защиту от CSRF/ботов (чтобы предотвратить таких, как вы). Вам нужно извлечь токен как скрытое поле ввода из запрашиваемой страницы с формой и повторно отправить его в качестве параметра запроса. Jsoup может быть полезен для извлечения всех (скрытых) полей ввода. Не забудьте также передать пару имя-значение кнопки, которую вы хотите "нажать" программно. Также смотрите вышеупомянутую ссылку для получения дополнительных подсказок.

В будущем вам следует более четко формулировать точную ошибку, которую вы получаете, а не гадать наобум. Копируйте точное сообщение об ошибке и т.д.

15
ответ дан 30 November 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: