Javaを使用して、XML形式で表示を返すHTTPSサイトにアクセスします。URL自体にログイン資格情報を渡します。コードスニペットは次のとおりです。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
requestURL = "https://Administrator:Password@localhost: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応答コードを返しました:URLの401: https:// Administrator:Password @ localhost:8443/abcd
ブラウザで同じURLを使用すると、xmlが正しく表示されます。 Javaプログラム内でこの作業を行う方法を教えてください。
401は「許可されていない」ことを意味するため、資格情報が含まれている必要があります。
Java URL
は、表示している構文をサポートしていません。代わりにオーセンティケーターを使用できます。
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(login, password.toCharArray());
}
});
そして、資格情報なしで通常のURLを呼び出すだけです。
もう1つのオプションは、ヘッダーで資格情報を提供することです。
String loginPassword = login+ ":" + password;
String encoded = new Sun.misc.BASE64Encoder().encode (loginPassword.getBytes());
URLConnection conn = url.openConnection();
conn.setRequestProperty ("Authorization", "Basic " + encoded);
PS:そのBase64Encoderを使用することはお勧めしませんが、これは簡単な解決策を示すためだけです。そのソリューションを維持したい場合は、そのライブラリを探してください。たくさんあります。
これを試して。サーバーに有効なユーザーを知らせるには、認証に合格する必要があります。これらの2つのパッケージをインポートする必要があり、jersy jarを含める必要があります。 jersy jarを含めたくない場合は、このパッケージをインポートします
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;
}