使用Unirest JAVA进行身份验证

时间:2014-09-15 14:40:57

标签: java cookies unirest

我需要对执行补丁程序的Web应用程序执行请求。我正在向这个请求提供它请求我的参数,但我不知道如何从我在补丁请求之前执行的登录请求中传递凭据。 我正在尝试从登录响应的标题中获取cookie数据并将其作为简单字符串提供给补丁请求,但我不确定它是否是正确的方法。 基本上我正在做的就是这个。

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

我对我获取和设置cookie数据的方式不满意,但我没有在文档中找到任何正确的方法。

任何人都可以帮助我。

感谢。

1 个答案:

答案 0 :(得分:12)

看起来不支持cookie是Unirest的有意识的设计决定。来自pull-request that adds cookie support的评论:

  

REST API应该是无状态的,所以我想避免在我们的主流客户端库中支持cookie。但是我会保持这个拉取请求是开放的,所以如果有人必须访问带有cookie的API他将会是能够使用你的代码;)

但是,如果不进行测试,我认为playing with custom HTTP clients应该有效。我试着尝试类似于这个的东西

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