0

Apache HttpClient API を使用して Atlassian Confluence wiki ページにアクセスしようとしています。

これが私のコードです:

public class ConcfluenceTest{

    public static void main(String[] args) {
        String pageID = "107544635";
        String hostName = "valid_hostname";
        String hostScheme = "https";
        String username = "verified_username";
        String password = "verified_password";
        int port = 443;

        //set up the username/password authentication
        BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(
            new AuthScope(hostName, port, AuthScope.ANY_REALM, hostScheme),
            new UsernamePasswordCredentials(username, password));

        HttpClient client = HttpClientBuilder.create()
            .setDefaultCredentialsProvider(credsProvider)
            .build();

        try {

            HttpGet getRequest = new HttpGet("valid_url");
            System.out.println(getRequest.toString());

            HttpResponse response = client.execute(getRequest);

            //Parse the response
            BufferedReader rd = new BufferedReader(
                new     InputStreamReader(response.getEntity().getContent()));
            StringBuffer result = new StringBuffer();
            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }

            System.out.println(result.toString());

        } catch (UnsupportedEncodingException e) {
            System.out.println(e.getStackTrace());
        } catch (IOException e) {
            System.out.println(e.getStackTrace());
        }

    }
}

このコードを実行しようとすると、印刷された応答はログイン画面の HTML であり、認証が失敗したことを意味します。ただし、このコードは、登録ユーザーに制限されていないページへの URL を指定すると、正しい応答を返します (つまり、資格情報は必要ありません)。ポート/スキームのすべての順列も試しました。

誰かが私に欠けているものを教えてもらえますか?

4

1 に答える 1

0

Afaik、http-basic-auth がサポートされている場合、次のようなものです

user:password@server:port/path 

も動作するはずです。ブラウザで動作するかどうかを確認できます。

Confluence が基本認証をサポートしていない場合は、firebug を使用して、ログイン フォームのアクション (パスなど/dologin.action)、メソッド ( POST)、およびユーザー/パスワード フィールドの名前を確認します。

その情報を使用して、次のようなリクエストを作成できます。

HttpPost httpPost = new HttpPost(fullFormActionUrlWithServerAndPort);
List <NameValuePair> nvp = new ArrayList <NameValuePair>();
nvp.add(new BasicNameValuePair("name-of-the-user-field", "your-user-name"));
nvp.add(new BasicNameValuePair("name-of-the-pass-field", "your-password"));
httpPost.setEntity(new UrlEncodedFormEntity(nvp));
于 2015-09-01T11:22:18.663 に答える