3

Java で Rest API を使用して QC 11 にアクセスしようとしています。

HPが提供するマニュアルのAPIリファレンスに従っています。以下は、ログイン認証の基本的な手順です。

非 Web アプリケーション認可クライアントは is-authenticated リソースを照会し、認証ヘッダーを送信しません。この手順はオプションです。

GET /qcbin/rest/is-authenticated

サーバーは要求を拒否し、認証ポイントへの参照を返します。

HTTP/1.1 401 Unauthorized WWW-Authenticate: LWSSO realm=http://[server]:[port]/qcbin/authentication-point

クライアントは有効な基本認証ヘッダーを認証ポイントに送信します。

GET /qcbin/authentication-point/authenticate 認証: 基本 ABCDE123

サーバーは基本認証ヘッダーを検証し、新しい LW-SSO トークンを作成して、それを LWSSO_COOKIE_KEY として返します。

HTTP/1.1 200 OK Set-Cookie: LWSSO_COOKIE_KEY={cookie}

アプリケーションは、トークンを使用してデータとサービスにアクセスできるようになりました。セッションの最後に、ログオフしてトークンを破棄します。

これが私のJavaコードです。

DefaultHttpClient httpClient = new DefaultHttpClient();

            String encoding = Base64.encodeBase64String("demoUser:demoUser123".getBytes());
            HttpGet httpGet = new HttpGet("http://HOST_VALUE:PORT_VALUE/qcbin/authentication-point/authenticate");
            //httpGet.setHeader("GET", "/qcbin/authentication-point/authenticate");
            httpGet.setHeader("Authorization:", "Basic " + encoding);
            HttpResponse response;



            httpClient.getCredentialsProvider().setCredentials(
                    new AuthScope("proxyHost", 8080),
                    new UsernamePasswordCredentials("userName", "Password"));




            response = httpClient.execute(httpGet);


            System.out.println(response.getAllHeaders().toString());
            System.out.println(response.getStatusLine().toString());
            BufferedReader br = new BufferedReader(
                    new InputStreamReader((response.getEntity().getContent())));

            String output;
            System.out.println("Output from Server .... \n");
            while ((output = br.readLine()) != null) {
                System.out.println(output);
            }
            httpClient.getConnectionManager().shutdown();

次のような出力が得られます

[Lorg.apache.http.Header;@159e154 HTTP/1.1 400 Bad Request Output from Server ....

Java を使用して REST を使用するのは初めてです。誰でも助けることができますか?REST を使用して ALM に接続し、データをフェッチする例はありますか?

4

1 に答える 1

3

問題を解決しました。

問題はbase64エンコーディングにありました! 文字列を base64 でエンコードされた文字列に変換する場合...結果が 76 文字を超える場合。新しい行を追加します!76未満であっても

だから解決策は

encoding = encoding.replaceAll("\n", "");
于 2012-06-08T06:00:36.167 に答える