2014-09-15 18 views
10

Tôi cần thực hiện yêu cầu đối với ứng dụng web thực thi quy trình vá. Tôi đang đưa ra yêu cầu này các tham số nó yêu cầu tôi, nhưng tôi không biết làm thế nào để vượt qua các thông tin đăng nhập từ một yêu cầu đăng nhập tôi đang thực hiện trước khi yêu cầu bản vá. Tôi đang cố gắng lấy dữ liệu cookie từ tiêu đề của phản hồi đăng nhập và đưa nó vào yêu cầu vá dưới dạng chuỗi đơn giản, nhưng tôi không chắc đó có phải là cách phù hợp để thực hiện hay không. Về cơ bản những gì tôi đang làm là điều này.Auth with Unirest JAVA

HttpResponse<JsonNode> respuesta = Unirest.post(urlLogin) 
    .headers(headers) 
    .fields(fields) 
    .asJson(); 
JSONObject body = respuesta.getBody().getObject(); 
Headers headerBody = respuesta.getHeaders(); 
String tmp = headerBody.get("set-cookie").get(0); 
this.cookie = "sd-touch-mode=false; ".concat(tmp.replace(";Path=/;HttpOnly","")); 
Map<String,String> cabeceras = new HashMap<String, String>(); 
cabecera.put("Cookie", this.cookie); 
HttpResponse<JsonNode> respuesta = Unirest.post(urlFixpack) 
    .headers(headers) 
    .fields(fields) 
    .asJson(); 

Tôi không thoải mái với cách tôi đang nhận và đặt dữ liệu cookie, nhưng tôi không tìm thấy trong tài liệu bất kỳ cách nào phù hợp để thực hiện.

ai cũng có thể giúp tôi.

Cảm ơn.

Trả lời

11

Dường như không hỗ trợ cookie là quyết định thiết kế có ý thức trong Unirest. Từ các nhận xét của một pull-request that adds cookie support:

REST API phải là trạng thái vô hiệu, vì vậy tôi muốn tránh hỗ trợ cookie trong thư viện khách hàng chính của chúng tôi .. nhưng tôi sẽ giữ yêu cầu kéo này mở, vì vậy nếu có ai truy cập một API có cookie, anh ấy sẽ có thể sử dụng mã của bạn;)

Nhưng, nếu không thử nghiệm, tôi theo ấn tượng rằng playing with custom HTTP clients sẽ hoạt động. Tôi sẽ thử một cái gì đó tương tự như điều này

cookieStore = new org.apache.http.impl.client.BasicCookieStore(); 
Unirest.setHttpClient(org.apache.http.impl.client.HttpClients.custom() 
          .setDefaultCookieStore(cookieStore) 
          .build());