Как настроить браузер по умолчанию, который использует jdk / jre - PullRequest
0 голосов
/ 20 сентября 2019

Я использовал код программы, который вы можете увидеть ниже. Логика класса заключается в получении некоторых свойств из HTML-кода со страницы YouTube. Долгое время это работало нормально, но теперь нет.Причина проблемы заключается в следующем: jdk / jre использует Internet Explorer в качестве браузера по умолчанию, и теперь YouTube не поддерживает, т. Е. (Возвращает страницу с предложением обновить браузер).Вопрос заключается в следующем: как изменить браузер по умолчанию, который использует Java?

Я переключил браузер по умолчанию системы на Chrome и браузер по умолчанию Intellij IDE на Chrome, но он не дал мне никакого результата.

@Component(immediate = true, service = LastActualVideoService.class)
public class LastActualVideoServiceServiceImpl implements LastActualVideoService {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    private static final String LINK_TO_YOU_TUBE = "https://www.youtube.com/embed/";

    private static final String TRIGGER_FOR_VIDEO = "/watch?v=";

    private static final String VIDEO_SELECTOR = "/videos";

    private static final String HTML_SEPARATOR = "\\A";

    private static final String ERROR_MASSAGE = "Incorrect input URL";

    private static final String OPEN_TITLE_TAG = "<title>";

    private static final String CLOSE_TITLE_TAG = "</title>";

    @Override
    public YouTubeChannelInfo getVideoBlob(String channelURL) {
        channelURL = channelURL.concat(VIDEO_SELECTOR);
        try (InputStream response = new URL(channelURL).openStream()) {
            Scanner scanner = new Scanner(response);
            String responseBody = scanner.useDelimiter(HTML_SEPARATOR).next();

            String uniqueVideo = responseBody.substring(responseBody.indexOf(TRIGGER_FOR_VIDEO), responseBody.indexOf(TRIGGER_FOR_VIDEO) + 20);
            String title = responseBody.substring(responseBody.indexOf(OPEN_TITLE_TAG) + 7, responseBody.indexOf(CLOSE_TITLE_TAG));
            String linkToVideo = LINK_TO_YOU_TUBE.concat(uniqueVideo.substring(uniqueVideo.lastIndexOf('=') + 1));

            return new YouTubeChannelInfo(linkToVideo, title, channelURL);
        } catch (IOException e) {
            logger.error(ERROR_MASSAGE, e);
            return null;
        }
    }
}

1 Ответ

1 голос
/ 20 сентября 2019

URL.openStream не «использует браузер», ваша Java-программа действует как сам HTTP-клиент.Удаленный сервер может узнать, какой тип браузера подключается, - пользовательский агент , который клиент отправляет с запросом.Возможно, что Youtube не распознает или не любит значения по умолчанию.

Как прокомментировал Джоахим Роде, решение состоит в том, чтобы вручную установить пользовательский агент на что-то, что Youtube распознает как поддерживаемое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...