2013-04-23 30 views
5

Tôi đang sử dụng httpclient được xây dựng để phát hành truy vấn "get" tới dịch vụ bên ngoài cần xác thực. Cụ thể hơn, tôi đang cố gắng gửi các truy vấn để chia nhỏ từ dịch vụ của mình. Làm cách nào để chuyển thông tin đăng nhập của người dùng vào yêu cầu? Tôi muốn sử dụng auth cơ bản thay vì xử lý các thẻ xác thực.http auth cơ bản với vert.x

+0

httpclient là một khuôn khổ Jakarta và có một số người khác gọi là điều tương tự. Có được xây dựng trong hỗ trợ cho URLConnection. Ý anh là gì? –

+0

Tôi đang đề cập đến httpclinet được xây dựng trong vert.x được khởi tạo bởi: HttpClient httpClient = vertx.createHttpClient(); – user2312682

Trả lời

15

Xác thực cơ bản là tất cả về Tiêu đề cấp phép.

Bạn nên thêm tiêu đề đó với giá trị bao gồm "cơ bản" (ghi chú trống) và thông tin đăng nhập của bạn: vượt qua (phân tách bằng dấu hai chấm) được mã hóa trong base64. Tính năng này chỉ an toàn nếu bạn đang sử dụng HTTPS.

Dưới đây là làm thế nào tôi có được điều này được thực hiện trong vert.x:

HttpClient client = vertx.createHttpClient().setSSL(true) 
    .setTrustAll(true) //You may not want to trust them all 
    .setHost("api.myawesomeapi.com") 
    .setPort(443); 
HttpClientRequest clientRequest = client.get("/"+action+"/?"+params, new Handler<HttpClientResponse>() { 
      public void handle(final HttpClientResponse response) { 
       if (response.statusCode==200){ 
        // It worked ! 
       } else { 
        // Oops 
       } 
      } 
     }); 

clientRequest.putHeader(HttpHeaders.Names.AUTHORIZATION, "Basic "+base64key); 

Ở đây tôi đã có base64key, nhưng nếu tôi đã phải tạo ra nó, tôi sẽ sử dụng một cái gì đó như:

base64key = Base64.encodeBytes(new StringBuilder(apiKey).append(":").append(secretKey).toString().getBytes(), Base64.DONT_BREAK_LINES); 

Nếu bạn sử dụng POST thay vì nhận được, đừng quên thêm các tiêu đề bắt buộc:

clientRequest.putHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(params.getBytes().length)) 
     .putHeader(HttpHeaders.Names.CONTENT_TYPE, "application/x-www-form-urlencoded") 
     .write(params); 

Tôi hy vọng nó giúp

Hugo

Các vấn đề liên quan