使用Unirest JAVA进行身份验证

11

我需要执行一个针对Web应用程序的请求来执行Patch过程。 我正在提供请求我的参数,但是我不知道如何从先前执行的登录请求中传递凭据到Patch请求。 我试图从登录响应的标头中获取Cookie数据,并将其作为简单字符串提供给Patch请求,但我不确定这是否是正确的方法。基本上我正在做的是这样的。

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个回答

12

看起来在Unirest中不支持cookies是一个有意的设计决策。从一篇添加cookie支持的pull-request的评论中可以看到:

REST API应该是无状态的,所以我希望在我们的主流客户端库中避免使用cookie支持..但我会继续保持这个pull request开放,如果有人需要访问使用cookie的API,他将能够使用你的代码;)

但是,在未经测试的情况下,我认为使用自定义HTTP客户端可能会起作用。我会尝试类似于这样的东西。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接