2017-06-24 22 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

を使用する

試してあなたのダウンロード()メソッドは、Javaのデフォルトの接続パラメータを使用して、URL.openStreamを()を使用して、最初からその接続を開きます。作成したhttp_connectionは効果がありません。なぜなら、あなたのコードは作業を行っているdownload()メソッドでコードを使用していないからです。

URLの代わりにhttp_connectionをdownload()メソッドに渡し、URL.openStream()の代わりにgetInputStream()メソッドを使用する必要があります。次に、リクエストプロパティの効果が表示されます。

+0

私はこれらの変更を行いました:1. 'downloader.download(http_connection)' 2.空のダウンロード(HttpURLConnection u) '3.' InputStream in = u.getInputStream(); 'しかし、これは私に同じエラーを与えます:サーバーはHTTP応答コードを返しました:403 –

関連する問題