Получение «MalformedURLException: нет протокола» по действительному URL-адресу

Я пытаюсь получить доступ к изображению, размещенному в Google Cloud Storage, и загрузить его с подписанным URL-адресом, но оно выдает исключение MalformedURLException, если я передаю подписанную строку URL-адреса в качестве параметра. Я знаю, что это действительный URL-адрес, поскольку вставка его в мой браузер работает.

Это не работает:

URL url = new URL(signedUrl);

Однако вставка вывода System.out.println(signedUrl) в объект URL работает.

System.out.println(signedUrl);
URL url = new URL("https://storage.googleapis.com/rydr/insurance_documents/test123.png?X...");

Исключение:

java.lang.RuntimeException: java.net.MalformedURLException: no protocol: "https://storage.googleapis.com/rydr/insurance_documents/test123.png?X..."

Несколько лет назад у пользователя StackOverflow возникла аналогичная проблема здесь, но предложения по использованию .trim() не помогли мне решить проблему.

Я также пробовал использовать DownloadManager, но он выдает аналогичное исключение:

java.lang.IllegalArgumentException: Can only download HTTP/HTTPS URIs: "https://storage.googleapis.com/rydr/insurance_documents/test123.png?X..."

Очевидно, что в https: есть невидимый символ. Проверять.

user207421 20.03.2024 08:21

«Я знаю, что это действительный URL-адрес, поскольку вставка его в мой браузер работает». - Это не окончательный тест. Строка URL-адреса типичного браузера автоматически «исправляет» различные проблемы в URL-адресе, чтобы сделать его действительным. Класс URL не такой снисходительный. Если URL говорит, что это недействительно, то это >не< недействительно.

Stephen C 20.03.2024 08:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просмотрев PHP-скрипт, который генерирует подписанный URL-адрес в браузере, я обнаружил, что он выводит URL-адрес в двойных кавычках.

Удаление двойных кавычек в Java вручную устранило проблему:

URL url = new URL(signedUrl.replace("\"", ""));

Еще лучше исправить PHP, источник проблемы. В противном случае вы просто пишете программу с тысячей костылей.

user207421 20.03.2024 09:55

Другие вопросы по теме