【问题标题】:Is there a way to prevent Apache CloseableHttpClient from throwing HttpResponseException?有没有办法防止 Apache CloseableHttpClient 抛出 HttpResponseException?
【发布时间】:2020-02-22 15:04:22
【问题描述】:

我正在使用 Apache HttpComponents (4.5.11) 来测试 Web API。

对于负面测试(例如发送错误请求),我还想检查响应正文,但 CloseableHttpClient 会使用响应的状态代码抛出 HttpResponseException 而不是返回实际响应。 有没有办法防止这种情况发生,或者我应该切换到另一个库(例如 RestAssured)?

这是我的做法:

try (CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = httpClient.execute(request)) {
     ResponseHandler<String> handler = new BasicResponseHandler();
     String body = handler.handleResponse(response);
     //Deserialize and perform response assertions..
} catch(HttpResponseException e){
    //Exception is caught here..
}

pom.xml 依赖:

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.11</version>
    </dependency>

【问题讨论】:

    标签: java apache-httpclient-4.x apache-httpcomponents web-api-testing


    【解决方案1】:

    我不确定是否理解问题。没有什么能阻止您直接从响应对象中获取状态代码并读取响应内容。

    try (CloseableHttpClient httpClient = HttpClients.createDefault();
         CloseableHttpResponse response = httpClient.execute(request)) {
        int statusCode = response.getStatusLine().getStatusCode();
        final HttpEntity entity = response.getEntity();
        if (entity != null) {
            try (InputStream inputStream = entity.getContent()) {
                // Do something useful with the response
            }
        }
    }
    

    【讨论】:

    • handler.handleResponse(response);该声明是引发异常的声明。我将其删除并自己处理了响应。感谢您的帮助@ok2c
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2017-01-17
    相关资源
    最近更新 更多