403 ошибка при загрузке с URL, но отлично работает в браузерах

#java #spring-boot #url

Вопрос:

Я разрабатываю небольшой тест для загрузки apk из apkpure с использованием java. URL-адрес, который у меня есть, возвращает 403. Но в браузере это работает нормально. Все решения, которые я пробовал, не сработали.

Вот код:

 URL url = new URL(TheUrl);
try (InputStream in = url.openStream()) {
    Files.copy(in, Paths.get(apkPathInFolder), StandardCopyOption.REPLACE_EXISTING);
    System.out.println("test ok");
} catch (IOException e) {
    // handle exception
    System.out.println(e);
}
 

Как я мог с этим справиться, пожалуйста ?

Спасибо

Пример URL-адреса, который я ввел в качестве входных данных.

Ответ №1:

Агент пользователя Java по умолчанию заблокирован некоторыми онлайн-службами. Вам нужно установить User-Agent заголовок на что-то другое:

     URL url = new URL(httpUrl);
    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    httpURLConnection.setRequestProperty("User-Agent", "my-agent");
    httpURLConnection.connect();

    try (InputStream in = httpURLConnection.getInputStream()) {
 

Полный код:

 public static void main(String[] args) throws IOException {
        URL url = new URL("https://download.apkpure.com/b/APK/Y29tLnRlbmNlbnQuaWdfMTU1MjNfYmFhM2U4Njk?_fn=UFVCRyBNT0JJTEUgUkVTSVNUQU5DRV92MS42LjBfYXBrcHVyZS5jb20uYXBramp;as=1e5ab5a5ef235ad0674f6ed4f7ff59576150d1cdamp;ai=33533981amp;at=1632686421amp;_sa=ai,atamp;k=06ee0e1f9f5964c4edc23905822a9c8861537455amp;_p=Y29tLnRlbmNlbnQuaWcamp;c=2|GAME_ACTION|ZGV2PVBST1hJTUElMjBCRVRBJnQ9YXBrJnM9MTEzMjQ5NjAwMiZ2bj0xLjYuMCZ2Yz0xNTUyMyZodD1lMDEamp;ht=e01");
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        httpURLConnection.setRequestProperty("User-Agent", "my-agent");
        httpURLConnection.connect();

        try (InputStream in = httpURLConnection.getInputStream()) {
            Files.copy(in, Paths.get("/home/user/Documents/files/my-apk.apk"), StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            // handle exception
            System.out.println(e);
        }

    }
 

Комментарии:

1. @Lefretis, я добавляю httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0"); , но все равно получаю ту же ошибку 403.

2. Случайный агент пользователя (например "my-agent" , или "aaa" ) работает на меня.

3. Я просто копирую ваш код и пробую его с URL-адресом в описании. Это не работает. Я использую java 8

4. Есть ли у вас какие-либо ошибки? Я отредактировал свой ответ, включая полный код (JDK 16).

5. У меня та же ошибка 403. Я попробую с jdk16. Еще раз спасибо.

Ответ №2:

вы можете получить заголовок из браузера и установить его в своем коде.

если вы используете браузер Chrome, откройте инструменты разработки на странице запроса.