[英]ImageIO.read() returns 403 error
我有以下代碼:
public BufferedImage urlToImage(String imageUrl) throws MalformedURLException, IOException {
URL url = new URL(imageUrl);
BufferedImage image = ImageIO.read(url);
return image;
}
這應該是從給定的URL返回一個圖像。
我測試了這兩個隨機選擇的URL:
第一個工作正常,但第二個給出403錯誤:
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
at java.net.URL.openStream(URL.java:1010)
at javax.imageio.ImageIO.read(ImageIO.java:1367)
可能是錯誤的原因是什么? 謝謝。
ImageIO.read(URL)
方法打開一個URL連接,其中包含幾乎所有默認設置,包括User-Agent
屬性(將設置為您運行的JVM版本)。 顯然,您列出的網站需要更“標准”的UA。 使用直接telnet連接進行測試:
ImageIO.read(url)
發送的請求:
GET /newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg HTTP / 1.1
用戶代理:Java / 1.7.0_17
主持人:www.earthtimes.org
接受:text / html,image / gif,image / jpeg,*; q = .2, / ; Q = 0.2
連接:保持活力
響應代碼是404(至少對我而言),返回默認的text/html
頁面。
“標准”瀏覽器發送的請求:
GET /newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg HTTP / 1.1
用戶代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_7_5)AppleWebKit / 537.31(KHTML,類似Gecko)Chrome / 26.0.1410.65 Safari / 537.31
主持人:www.earthtimes.org
接受:text / html,image / gif,image / jpeg,*; q = .2, / ; Q = 0.2
連接:保持活力
響應代碼為200,帶有圖像數據。
以下簡單修復程序會延長您的代碼,但通過設置更“標准”的UA來解決問題:
final String urlStr = "http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg";
final URL url = new URL(urlStr);
final HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestProperty(
"User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");
final BufferedImage image = ImageIO.read(connection.getInputStream());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.