使用HtmlUnit WebClient传递每个请求的基本身份验证凭据

时间:2011-12-05 16:34:01

标签: java htmlunit basic-authentication

我正在尝试为Web应用程序编写简单的冒烟测试。

应用程序通常使用基于表单的身份验证,但也接受基本身份验证,但由于默认情况下是基于表单的身份验证,因此它永远不会发送所需的身份验证,而只是发送登录表单。

在测试中,我尝试使用

发送基本的auth标头
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>")

我还尝试在WebRequest对象中填充凭据并将其传递给webClient.getPage方法。

但是在服务器上我没有获得身份验证标头。我怀疑WebClient只有在服务器明确询问它时才会发送身份验证标头,这种情况从未发生过。

所以问题是如何让WebClient在每个请求上发送Authentication头,包括第一个请求?

1 个答案:

答案 0 :(得分:16)

这可能会有所帮助:

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());
  }