簡體   English   中英

如果 url 包含特殊字符,Java ImageIO.read() 會崩潰

[英]Java ImageIO.read() crashes if url contains special characters

在我的 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)

那怎么下載圖片呢?

謝謝你的幫助。

該問題似乎與 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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM