#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, откройте инструменты разработки на странице запроса.