【问题标题】:Couldn't download image无法下载图片
【发布时间】:2014-09-03 03:28:57
【问题描述】:

我正在尝试从 url 下载图像但得到 java.io.IOException: 异常。 我的代码是:

    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)

此代码适用于某些网址,但我不明白为什么不这样做。 非常感谢。

【问题讨论】:

  • 403 表示禁止。所以你没有访问 URL 的权限
  • 我知道这意味着禁止......但我有权访问,因为它适用于浏览器......
  • 您是否必须登录您尝试下载的站点?您可以右键单击并将图像保存在浏览器中吗?此外,您在 File picutreFile 中拼写错误的图片,您可能需要更改它以防止将来出现错误。

标签: java


【解决方案1】:

尝试在您的 url 上设置用户代理属性,例如,看看它是否有帮助:

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);

【讨论】:

  • 您好,感谢您的回答。但是这段代码之后如何下载图片呢?
【解决方案2】:

只是一个建议:

当这种情况只发生在这个 URL(或域)上时,可能是另一端的 http-server 实现在处理请求之前检查了一些 HTTP-Headers。并且您没有发送此类信息。

结果可能是,服务器将响应 403。

也许:禁止未知客户端(例如用户代理)

也许此链接将有助于为您的请求添加标头:
https://stackoverflow.com/a/15555952/3887073

【讨论】:

    【解决方案3】:

    此服务器可能不承诺某些具有无效 HTTP 请求的请求。 您可以随请求一起发送您的 HTTP 头文件,如果需要某些 HTTP 头信息,服务器将承诺您下载此图像。 像这样:

    URL myURL = new URL(serviceURL);
    HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();
    String userCredent = "username:password";
    myURLConnection.setRequestProperty ("property", value);
    myURLConnection.setRequestMethod("POST");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多