2011-12-05 37 views
5

Tôi đang cố gắng viết một bài kiểm tra khói đơn giản cho một ứng dụng web. Ứng dụng thường sử dụng xác thực dựa trên biểu mẫu, nhưng chấp nhận xác thực cơ bản, nhưng vì mặc định là xác thực dựa trên biểu mẫu, nó không bao giờ gửi yêu cầu xác thực, mà thay vào đó chỉ gửi biểu mẫu đăng nhập.Truyền thông tin xác thực cơ bản với mọi yêu cầu với HtmlUnit WebClient

Trong thử nghiệm tôi cố gắng để gửi header auth cơ bản sử dụng

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>") 

Tôi cũng đã cố gắng nhồi nhét các thông tin trong một đối tượng WebRequest và qua đó đến phương pháp webClient.getPage.

Nhưng trên máy chủ, tôi không nhận được tiêu đề xác thực. Tôi nghi ngờ WebClient chỉ gửi tiêu đề xác thực nếu nó được máy chủ yêu cầu một cách rõ ràng, điều này không bao giờ xảy ra.

Vì vậy, câu hỏi là làm thế nào tôi có thể làm cho WebClient gửi tiêu đề xác thực trên mọi yêu cầu, bao gồm cả đầu tiên?

+0

Tôi không rõ ràng những gì bạn có ý nghĩa bởi "chỉ cần gửi mẫu đăng nhập" - - điều này có xuất hiện trên một trang trong ứng dụng của bạn không? Tôi chỉ đào một số mã cũ để kiểm tra một trang web với các hộp thoại xác thực trình duyệt được chèn vào bởi một số bảo mật miền, không phải bởi ứng dụng, và về cơ bản tôi đã làm chính xác như bạn đã làm, nó hoạt động tốt. –

+0

Đây là cách ứng dụng được triển khai. Xác thực cơ bản chỉ dành cho thử nghiệm và các máy khác giao tiếp với ứng dụng. Chúng tôi không muốn người dùng thấy biểu mẫu xác thực cơ bản xấu xí như được tạo bởi trình duyệt. –

Trả lời

15

này có thể giúp:

WebClient.addRequestHeader(String name, String value)

một cụ thể hơn có thể tạo ra một tiêu đề xác thực như thế này

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()); 
    } 
Các vấn đề liên quan