2011-03-10 13 views
2

http基本認証を使用するサーバーからファイルをダウンロードするために、次のJavaコードを記述しました。しかし、私はHTTP 401のエラーを取得しています。 しかし、私はブラウザからURLを直接打ってファイルをダウンロードすることができます。Javaコードから基本HTTP認証を使用するサーバーからファイルをダウンロードする際の問題

OutputStream out = null; 
    InputStream in = null; 
    URLConnection conn = null; 

    try { 
        // Get the URL 
         URL url = new URL("http://username:[email protected]/protected-area/somefile.doc"); 
        // Open an output stream for the destination file locally 
        out = new BufferedOutputStream(new FileOutputStream("file.doc")); 
        conn = url.openConnection(); 
        in = conn.getInputStream(); 

        // Get the data 
        byte[] buffer = new byte[1024]; 
        int numRead; 
        while ((numRead = in.read(buffer)) != -1) { 
         out.write(buffer, 0, numRead); 
        }    

    } catch (Exception exception) { 
        exception.printStackTrace(); 
    } 

しかし、私はプログラムの実行時に次の例外を取得イム:

java.io.IOException: Server returned HTTP response code: 401 for URL: http://username:[email protected]/protected-area/somefile.doc 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436) 
     at TestDownload.main(TestDownload.java:17) 

私は、ブラウザから直接、URL、http://username:[email protected]/protected-area/somefile.docを押すことで、ファイルをダウンロードすることができていますし。

この問題の原因となる可能性があり、それを修正する方法はありますか?

お願いします ありがとうございます。

答えて

2

私はorg.apache.http使用しています:

private StringBuffer readFromServer(String url) { 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 

    HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() { 
     public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException { 
      AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE); 

      if (authState.getAuthScheme() == null) { 
       Credentials credentials = new UsernamePasswordCredentials(
         Constants.SERVER_USERNAME, 
         Constants.SERVER_PASSWORD); 

       authState.setAuthScheme(new BasicScheme()); 
       authState.setAuthScope(AuthScope.ANY); 
       authState.setCredentials(credentials); 
      } 
     }  
    }; 

    httpclient.addRequestInterceptor(preemptiveAuth, 0); 

    HttpGet httpget = new HttpGet(url); 
    HttpResponse response; 

    InputStream instream = null; 
    StringBuffer result = new StringBuffer(); 

    try { 
     response = httpclient.execute(httpget); 

等...

関連する問題