当前位置: 首页 > 知识库问答 >
问题:

如何从Apache HttpClient5的HttpACK获取响应正文?

章永安
2023-03-14

在版本4中,获取状态代码和响应正文非常简单:

StringEntity entity = new StringEntity(jsonData.toString());
HttpResponse r = org.apache.http.client.fluent.Request.Post(uri)
        .connectTimeout(10*1000)
        .socketTimeout(10*1000)
        .addHeader("Content-Type", "application/json; charset=utf-8")
        .body(entity)
        .execute()
        .returnResponse();
int status = r.getStatusLine().getStatusCode();
String body = EntityUtils.toString(r.getEntity(), "UTF-8");
return new CoolResponse(status, body);

但是现在在httpclient5中,由于某种原因,不可能从HttpACK中获取与响应体相关的任何内容。对此非常困惑。如果我在他们的快速入门(https://hc.apache.org/httpcomponents-client-5.0.x/quickstart.html)中遵循示例3,它建议我创建一个CloseableHttpClient、一个HttpGet和一个CloseableHttpACK,但是这些都不允许您设置连接超时。试图找到两全其美的方法,但是这里的选项似乎有点混乱。

共有1个答案

郭弘盛
2023-03-14

它在快速入门中没有提到,但在Fluent API中,您可以使用handleACK()后续执行()并将其传递给lambda。

我最终找到了一篇比快速入门更好的文章:https://ok2c.github.io/httpclient-migration-guide/migration-to-classic.html

 类似资料:
  • 问题内容: 我正在尝试从Web读取JSON数据,但是该代码返回空结果。我不确定我在做什么错。 问题答案: 理想的方法 不是 使用,而是直接在阅读器上使用解码器。这是一个不错的函数,它获取url并将其响应解码到结构上。 使用示例: 您不应该在生产中使用默认结构,如最初回答的那样!(/ etc调用的是哪个)。原因是默认客户端没有设置超时。如果远程服务器无响应,那将是糟糕的一天。

  • 问题内容: 想象一下我运行这个: 在/ajax/watch.php内部,假设我有这个: 并且alert(responseText)返回: 而不是我需要的文本字符串。有什么帮助吗? 问题答案: 看起来您的jQuery以某种方式返回了XMLHttpRequest对象,而不是您的响应。 如果是这种情况,则应请求其属性,如下所示: 但是,如果这不起作用,则可能实际上是在接收JSON响应,并且您看到的可能是

  • 我目前正在尝试将我的phpmyadmin服务器连接到android studio。如果重要的话,我正在使用模拟器。我制作了一些php文件来接收数据并更改数据库中的数据。 checkuserexist.php 在我的Android Studio程序中: InputStream=conn.getInputStream();返回一个exeption:failed to connect to/10.0.2

  • 问题内容: 我在同一个域上有一个请求,我想读取cookie。它不断返回。 有任何想法吗?我为此使用Chrome。 问题答案: 您正在寻找的响应标头: 它不适用于HTTPOnly cookie。 更新资料 根据XMLHttpRequest级别1和XMLHttpRequest级别2,此特定的响应标头属于您可以使用所获得的“禁止”响应标头,因此,该方法可以起作用的唯一原因基本上是一个“顽皮的”浏览器。

  • 我正在尝试从json的响应中获取正文并打印这个json或能够将他放入数组。我在堆栈上找到了这篇文章:如何从http.Get获得JSON响应。有代码: 但是我不明白为什么会有“Decode(target)”和“target interface{}”。它是做什么的?为什么当我试着打印json时?NewDecoder(r.Body)没有什么有意义的。