我正在尝试从url下载图像但是得到了java.io.IOException:exception。 我的代码是:
public static void main(String[] args) throws MalformedURLException, IOException {
File picutreFile = new File("test.jpg");
FileUtils.copyURLToFile(new java.net.URL("http://paceoil.ca/files/includes/images/images-stories-presentation-october-icon-graphic.jpg"), picutreFile);
}
跑步时扔了:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://paceoil.ca/files/includes/images/images-stories-presentation-october-icon-graphic.jpg
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at org.apache.commons.io.FileUtils.copyURLToFile(FileUtils.java:1460)
at com.hrant.Test.main(Test.java:14)
此代码适用于某些网址,但为此我无法理解为什么不这样做。 非常感谢。
答案 0 :(得分:9)
尝试在您的网址上设置用户代理属性,例如,看看它是否有帮助:
File picutreFile = new File("src/test.jpg");
URL url=new URL("http://paceoil.ca/files/includes/images/images-stories-presentation-october-icon-graphic.jpg");
URLConnection conn = url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
conn.connect();
FileUtils.copyInputStreamToFile(conn.getInputStream(), picutreFile);
答案 1 :(得分:0)
只是一个建议:
如果只发生在这个URL(或域)上,那么另一端的http-server实现可能会在处理请求之前检查一些HTTP-Header。并且您不会发送此类信息。
结果可能是,服务器将以403响应。
可能:禁止未知客户端(例如用户代理)
也许此链接有助于为您的请求添加标题:
https://stackoverflow.com/a/15555952/3887073
答案 2 :(得分:0)
此服务器可能不承诺某些请求具有无效的HTTP请求。 您可以随请求发送HTTP头文件,如果需要一些HTTP头信息,服务器将保证您下载此图像。 像这样的东西:
URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();
String userCredent = "username:password";
myURLConnection.setRequestProperty ("property", value);
myURLConnection.setRequestMethod("POST");