В комментариях не нашёл, поэтому не знаю, в чём может заключаться потенциально опасная или запрещённая операция по системе безопасности JavaRush.
Кроме того, хочу разобраться и прошу объяснить:
protected Document getDocument(String searchString, int page) throws IOException {
searchString = String.format(URL_FORMAT, searchString, page);
Document document = Jsoup.connect(searchString).userAgent("Mozilla/5.0").referrer("https://grc.ua/search/vacancy?text=java+%D0%BA%D0%B8%D0%B5%D0%B2").get();
return document;
}
1. В коде указан коннект к странице "http://hh.ua/search/vacancy?text=java+Киев&page=0"
В дебаггере видно, что именно это значение имеет переменная "searchString".
На следующем шаге в переменной document по-идее должна содержаться полученная страница.
В браузере эта страница отображает вакансии по Киеву:
Но в программе почему-то совершенно другое содержимое.
И, соответственно, код возвращает вакансии по совершенно другому региону.
Почему запись
Document document = Jsoup.connect(searchString).userAgent("Mozilla/5.0").referrer("https://grc.ua/search/vacancy?text=java+%D0%BA%D0%B8%D0%B5%D0%B2").get();
при переменной
searchString = http://hh.ua/search/vacancy?text=java+Киев&page=0
возвращает совершенно иное содержимое?
2. Не могу понять назначение
.referrer("https://grc.ua/search/vacancy?text=java+%D0%BA%D0%B8%D0%B5%D0%B2")
На предыдущем шаге в задаче было: "Добавь в коннекшен к урлу Хедхантера userAgent и referrer". Это, якобы "Чтобы Хэдхантер знал, кто к нему коннектится". На что влияет такая информативность запроса? "userAgent" - могу предположить, - если в разных браузерах страница может по-разному отображаться, то указание в запросе своего браузера поможет запросить версию страницы для нужного браузера. Но ведь о кроссбраузерности своих сайтов заботятся разработчики этих сайтов, информация о браузере итак видна на той стороне и главное - парсеру какая разница, для хрома или для оперы вернётся вариант веб-страницы. Не могу правильно предположить необходимость в этом случае в запросе указывать браузер.
Второй непонятный для меня параметр запроса - .referrer("https://grc.ua/search/vacancy?text=java+%D0%BA%D0%B8%D0%B5%D0%B2"). Значение нужно было взять из "Request Headers(Заголовки запроса)" в инструментах разработчика. Могу предположить, что это - откуда (с какого сайта) пришёл посетитель, но тоже не складывается - почему отображалось именно это значение? откуда оно взялось? И вообще, для чего оно нужно в запросе?
UPD по 2-му (не главному) вопросу.
Правильно ли я понимаю, что наличие в запросе "referrer("https://grc.ua/search/vacancy?text=java+%D0%BA%D0%B8%D0%B5%D0%B2")" сообщает той стороне (стороне на сервер), в данном случае ложную информацию об источнике запроса? Я запрашиваю страницу со своего IP-адреса, а пытаюсь это выдать за запрос с другого сайта?package com.javarush.task.task28.task2810;
import com.javarush.task.task28.task2810.model.HHStrategy;
import com.javarush.task.task28.task2810.model.Provider;
import com.javarush.task.task28.task2810.model.Strategy;
public class Aggregator {
public static void main(String[] args) {
Strategy strategy = new HHStrategy();
Provider provider = new Provider(strategy);
Controller controller = new Controller(provider);
controller.scan();
}
}