2014-09-02 71 views
1

我試圖從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) 

此代碼對一些網址,但這個我不能明白爲什麼不能。 提前謝謝。

+2

403意味着禁止。所以你沒有權限訪問網址 – user3662273 2014-09-02 18:49:07

+0

我知道這意味着禁止......但我有權限訪問,因爲它在瀏覽器上工作.. – 2014-09-02 18:52:52

+0

你是否必須登錄到您嘗試訪問的網站從下載?你可以右鍵單擊並將圖像保存在瀏覽器中嗎?你也在'File picutreFile'中拼寫錯誤圖片,你可能想改變它來防止未來的錯誤。 – turbo 2014-09-02 18:57:53

回答

6

嘗試設置用戶代理屬性,例如,看看是否有幫助:

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

你好,謝謝你的回答。但是,如何在此代碼之後下載圖像? – 2014-09-02 19:22:09

+0

看到我編輯的答案,那會下載文件 – user3487063 2014-09-02 19:29:22

+0

作品就像一個魅力!非常感謝。!!!!! – 2014-09-02 19:56:24

0

只是一個建議:

當這隻會發生在這個網址(或域),這是可能的,即在另一端的HTTP服務器實現處理請求之前檢查一些HTTP報頭。 ,而且你不會發送這樣的信息。

結果可能是,該服務器將響應與403

可能:禁止未知客戶端(例如用戶代理)

也許這個鏈接將有助於頭添加到您的要求:
在您的網址 https://stackoverflow.com/a/15555952/3887073

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