2011-12-05 6 views
5

Webアプリケーションの単純な煙のテストを作成しようとしています。HtmlUnit WebClientを使用してすべての要求に基本認証資格情報を渡す

通常、アプリケーションはフォームベースの認証を使用しますが、基本認証も受け入れますが、デフォルトはフォームベースの認証なので、認証は必須ではなく、ログインフォームを送信するだけです。私は

WebClient webClient = new WebClient(); 

DefaultCredentialsProvider creds = new DefaultCredentialsProvider(); 

// Set some example credentials 
creds.addCredentials("usr", "pwd"); 

// And now add the provider to the webClient instance 
webClient.setCredentialsProvider(creds); 

webClient.getPage("<some url>") 

を使用して、基本的な認証ヘッダを送信しようとする試験において

Iはまた、WebRequestクラスのオブジェクトに認証情報を詰め込むとwebClient.getPage方法にそれを通過しようとしました。

しかし、サーバー上で私は認証ヘッダーを取得しません。私はWebClientが決して発生しないサーバーによって明示的に要求される場合、認証ヘッダーを送信するだけだと思う​​。

WebClientに、最初のものを含むすべての要求に認証ヘッダーを送信させるにはどうすればよいですか?

+0

のような認証ヘッダーを作成することができます - - これはアプリ内のページに表示されますか?私はちょうどアプリケーションによってではなく、いくつかのドメインのセキュリティによって挿入されたブラウザ認証ダイアログでサイトをテストするいくつかの古いコードを掘り出しました。 –

+0

これはアプリケーションの実装方法です。基本認証は、テストやアプリとのインターフェイスをとる他のマシンのためだけです。私たちは、ブラウザで生成された醜い基本認証フォームをユーザーが見られることを望んでいません。 –

答えて

15

この役立つかもしれない:

WebClient.addRequestHeader(String name, String value)

をより具体的な一つは、私はあなたが「ちょうどログインフォームを送信」によって何を意味するかクリアしていないよ、この

private static void setCredentials(WebClient webClient) 
    { 
    String username = "user"; 
    String password = "password"; 
    String base64encodedUsernameAndPassword = base64Encode(username + ":" + password); 
    webClient.addRequestHeader("Authorization", "Basic " + base64encodedUsernameAndPassword); 
    } 

    private static String base64Encode(String stringToEncode) 
    { 
    return DatatypeConverter.printBase64Binary(stringToEncode.getBytes()); 
    } 
関連する問題