Java ImageIO.read () падает, если URL содержит специальные символы - PullRequest
2 голосов
/ 24 апреля 2019

В моем приложении Java я хочу загрузить изображение, используя следующее:

ImageIO.read(new URL("https://www.example.com/example.png"))

В большинстве случаев работает нормально, за исключением этого URL: https://cdn -images-1.medium.com / max / 1200/1 * XSCC_nLOSp1VJ6wXeANgCQ.png

Проблема в URL заключается в том, что в нем есть *. Поэтому я пробую следующие обходные пути, но безуспешно:

  • замена * на \ *
  • с заменой * на% 2A

У меня всегда возникает следующая ошибка:

javax.imageio.IIOException: Can't get input stream from URL!
at javax.imageio.ImageIO.read(ImageIO.java:1395)

Как я могу скачать изображение, тогда?

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 24 апреля 2019

Проблема, похоже, связана с Java 8 и исправлена ​​в Java 11. Проблема с Java 8 заключается в том, что возвращается код HTTP 403.

Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://cdn-images-1.medium.com/max/1200/1*XSCC_nLOSp1VJ6wXeANgCQ.png
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
at java.net.URL.openStream(URL.java:1045)
at javax.imageio.ImageIO.read(ImageIO.java:1393)

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

URL url = new URL("https://cdn-images-1.medium.com/max/1200/1*XSCC_nLOSp1VJ6wXeANgCQ.png");
URLConnection connection = url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
connection.connect();
BufferedImage bufferedImage = ImageIO.read(connection.getInputStream());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...