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

使用Apache HttpClient的Facade时,是否可以同时获取状态代码和正文内容?[重复]

韩明德
2023-03-14

我在一些示例代码中使用Apache的HttpClient Fluent Facade,供开发人员扩展。他们非常喜欢fluent facade,它可以直接调用:

this.body = Request.Get(uri.build()).execute().returnContent().asString();

此外,我还可以通过调用以下命令获取状态代码:

this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode();

不幸的是,在一些情况下,我除了需要主体之外还需要状态代码。基于这个问题,我认为我可以让他们学习HttpClient对象-

HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();

但是,这意味着初始化HttpClient对象并似乎拒绝Fluent接口和请求。获取(或发布)语法。有没有一种方法可以在不丢失流畅语法和不进行两次离散调用的情况下获取状态代码和主体?

共有1个答案

缪远
2023-03-14

是的,虽然您必须自己处理响应对象。以下是我过去如何做到这一点的一个例子:

org.apache.http.HttpResponse response = Request.Get(url)
    .connectTimeout(CONNECTION_TIMEOUT_MILLIS)
    .socketTimeout(SOCKET_TIMEOUT_MILLIS)
    .execute()
    .returnResponse();

int status = response.getStatusLine().getStatusCode();
byte[] serializedObject = EntityUtils.toByteArray(response.getEntity());

有几种使用EntityUtils检索正文内容的方法。在这种情况下,我正在从缓存中检索序列化对象,但是你明白了。我真的不相信这是对Fluent API的背离,但我想这是一个意见问题。问题是,使用Fluent retransXXX方法,响应被完全消耗和关闭,因此您必须从响应本身获得您需要的东西。

 类似资料:
  • 我正在使用apache的HttpClient(通过Fluent API)。当我获得响应对象时,我首先执行以下操作: 如果状态代码为4xx或5xx,我将抛出异常,或者返回内容: 这里是类型为的对象。但当我运行此程序时,我得到: 我怎样才能避开这件事?

  • 使用ApacheHttpClient 4.1。3并尝试从获取状态代码: 如何从中提取状态代码(202,404等)?或者,如果在4.1.3中还有另一种方法可以做到这一点,那它是什么? 另外,我假设完美/良好的HTTP响应是,但也希望得到确认。提前谢谢!

  • 在react组件中,通常不应在其中变异道具。此外,家长只能更改道具,不能直接更改状态。基于这两个事实,假设在任何componentDidUpdate调用中,例如。, 只读 这道具可能与prevProps不同,或者与此不同。状态可能与状态不同,但这两种情况不能同时发生?

  • 是否可以同时从套接字读取和写入?我有一个连续读取套接字的线程。由于只有一个线程从套接字读取,因此读取操作是线程安全的。现在我有很多线程(比如 100 个)写入套接字。因此,很明显,我必须通过做这样的事情来使写入操作线程安全, 现在我有一个线程不断调用readMessage()函数(在while循环中)。据我所知,如果套接字上没有要读取的消息,语句< code > inputstream . rea

  • 问题内容: 我想抢先获取要在中加载的网页的HTML代码,使用正则表达式解析它,并仅显示所需的HTML代码,同时让该网页仍然认为它已加载了所有内容。 有什么方法可以通过或类似方法来做到这一点? 编辑:我尝试过此: 该接口永远不会被调用 问题答案: 不得不使用HttpClient。无需Cookie,只需解析html:

  • 我想编写一个由文件路径参数化的宏。在编译时,它读取该文件并根据其内容发出Rust代码。这可能吗? 我发现但不清楚我如何在编译时使用它的结果,而不是将内容按原样拼接到生成的代码中。