2012-05-07 32 views
13

です。Javaを使用して、XML形式で表示を返すHTTPSサイトにアクセスしています。私はURL自体にログイン認証情報を渡します。サーバーがHTTP応答コードを返しました:URLはhttps:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
requestURL = "https://Administrator:[email protected]:8443/abcd"; 

try { 
     InputStream is = null; 
     URL url = new URL(requestURL); 
     InputStream xmlInputStream =new URL(requestURL).openConnection().getInputStream(); 
     byte[] testByteArr = new byte[xmlInputStream.available()]; 
     xmlInputStream.read(testByteArr); 
     System.out.println(new String(testByteArr)); 
     Document doc = db.parse(xmlInputStream); 
     System.out.println("DOC="+doc); 
    } catch (MalformedURLException e) { 
    } 

署名付き/署名なし証明書を検証しないプログラムでトラストマネージャを作成しています。しかし、上記のプログラムを実行するとエラーが発生する サーバーからHTTP応答コード:401が返されます。URL:https://Administrator:[email protected]:8443/abcd

ブラウザで同じURLを使用でき、xmlが正しく表示されます。 Javaプログラム内でこの作業を行う方法を教えてください。

答えて

24

401は「権限がありません」という意味で、資格情報が必要です。

Java URLは、表示している構文をサポートしていないと思います。認証者を代わりに使用できます。

Authenticator.setDefault(new Authenticator() { 

    @Override 
    protected PasswordAuthentication getPasswordAuthentication() {   
     return new PasswordAuthentication(login, password.toCharArray()); 
    } 
}); 

その後、資格情報なしで通常のURLを呼び出します。

他のオプションは、ヘッダーに資格情報を提供することである。

String loginPassword = login+ ":" + password; 
String encoded = new sun.misc.BASE64Encoder().encode (loginPassword.getBytes()); 
URLConnection conn = url.openConnection(); 
conn.setRequestProperty ("Authorization", "Basic " + encoded); 

PS:それはBase64Encoderを使用することは推奨されませんが、これは迅速な解決策を示すことだけです。その解決策を保持したい場合は、そうするライブラリを探します。たくさんあります。

+1

jersy jarファイルを含めたい場合はいけません。 2番目の選択肢は魅力的に機能しました。私はそれだけで内部のテストのために必要なので、それは十分かもしれないと思う。 – Vish

+1

Poletに感謝します。 2番目のオプションは私を助けました。 –

1

お試しください。サーバーに有効なユーザーを知らせるために認証を渡す必要があります。これらの2つのパッケージをインポートする必要があり、jersy jarを含める必要があります。あなたは、おかげでギヨームのPoletは、このパッケージをインポート

import sun.misc.BASE64Encoder; 

import com.sun.jersey.core.util.Base64; 
import sun.net.www.protocol.http.HttpURLConnection; 

、その後、

String encodedAuthorizedUser = getAuthantication("username", "password"); 
URL url = new URL("Your Valid Jira URL"); 
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
httpCon.setRequestProperty ("Authorization", "Basic " + encodedAuthorizedUser); 

public String getAuthantication(String username, String password) { 
    String auth = new String(Base64.encode(username + ":" + password)); 
    return auth; 
} 
関連する問題