2017-06-24 67 views
0

下面的代碼會下載具有指定URL的圖像。但是,我得到了一些URL的403錯誤。的Java禁錯誤的代碼,但不能與瀏覽器(2)

根據這一link,我嘗試使用調用setRequestProperty(),但仍然是我的問題並沒有解決。我想不出我犯或有什麼更多的,我應該添加到我的代碼錯誤了嗎?

import java.io.*; 
import java.net.URL; 
import java.net.MalformedURLException; 
import java.net.URLConnection; 
import java.net.HttpURLConnection; 

class Crawler{ 

    public static void main(String args[]){ 

     String address = "http://szcdn1.raagalahari.com/dec2016/hd/anupama-parameswaran-premam-hd-photos/anupama-parameswaran-premam-hd-photos294.jpg"; 
     Connection connection1 = new Connection(); 
     connection1.connector(address); 

    } 
} 

class Connection{ 
    void connector(String s){ 
     try{  
      URL url = new URL(s); 
      URLConnection uc = url.openConnection(); 
      HttpURLConnection http_connection = (HttpURLConnection) uc; 
      http_connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36"); 

      http_connection.connect(); 
      ImageDownload downloader = new ImageDownload(); 
      downloader.download(url); 

     }catch(Exception e) { 
      System.out.println(e); 
     }  
    } 
} 

class ImageDownload{ 

    void download(URL u){ 
     try 
     { 

      InputStream in = new BufferedInputStream(u.openStream()); 
      ByteArrayOutputStream out = new ByteArrayOutputStream(); 
      byte[] buf = new byte[1024]; 
      int n = 0; 

      while (-1!=(n=in.read(buf))){ 
       out.write(buf, 0, n); 
      } 

      out.close(); 
      in.close(); 

      byte[] response = out.toByteArray(); 


      FileOutputStream fos = new FileOutputStream("C://3.jpg"); 
      fos.write(response); 
      fos.close(); 
     } catch(IOException e){ 
      System.out.println(e); 
     } 
    } 
} 

對不起,如果問題是重複的。請幫助..

回答

0

403錯誤幾乎總是由於您試圖訪問您無權訪問的內容而導致的。

嘗試使用此

http_connection.setRequestProperty("http-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); 
+0

對不起,沒有奏效。 –

0

您的下載()方法打開使用URL.openStream從頭它的連接(),使用Java的默認連接參數。您準備的HTTP_CONNECTION沒有任何影響,因爲你的代碼沒有在做這工作的download()方法使用它。

因此,您應該將http_connection傳入download()方法,而不是使用URL.openStream(),而是使用其getInputStream()方法代替URL。然後你會看到請求屬性的影響。

+0

所以我做了這些改變:1. 'downloader.download(HTTP_CONNECTION)' 2.'void下載(HttpURLConnection類U)」 3 '的InputStream在= u.getInputStream();'但是這給了我同樣的錯誤:服務器返回HTTP響應代碼:403 –

相關問題