11

我需要向执行补丁过程的 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 数据的方式不满意,但我在文档中没有找到任何合适的方法来做到这一点。

任何人都可以帮助我吗?

谢谢。

4

1 回答 1

12

看起来不支持 cookie 是 Unirest 中一个有意识的设计决定。从添加 cookie 支持的拉取请求的评论中:

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

但是,如果不对其进行测试,我的印象是使用自定义 HTTP 客户端应该可以工作。我会尝试类似的东西

cookieStore = new org.apache.http.impl.client.BasicCookieStore();
Unirest.setHttpClient(org.apache.http.impl.client.HttpClients.custom()
                            .setDefaultCookieStore(cookieStore)
                            .build());
于 2015-03-09T21:50:34.817 回答