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

获取http响应代码和所有可用正文

张通
2023-03-14

我想要ot实现WebFlux示例客户端,它可以用http params发出请求,并获得响应体和http响应代码。我试过这个:

public ClientResponse execute(NotificationMessage nm)
Mono<String> transactionMono = Mono.just(convertedString);
        return client.post().uri(builder -> builder.build())
                .header(HttpHeaders.USER_AGENT, "agent")
                .body(transactionMono, String.class).exchange().block();
    }

    private static String convert(Map<String, String> map) throws UnsupportedEncodingException {
        String result = map.entrySet().stream().map(e -> encode(e.getKey()) + "=" + encode(e.getValue()))
                .collect(Collectors.joining("&"));
        return result;
    }

    private static String encode(String s) {
        try {
            return URLEncoder.encode(s, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new IllegalStateException(e);
        }
    }

您能在.exchange()之后给我一些建议吗?我如何获得http状态代码和所有可用的主体。

共有1个答案

梁宪
2023-03-14

从exchange返回的ClientResponse对象中,您可以使用response.statuscode()获取状态,并使用response.bodytoMono()或bodyToFlux()获取实际的主体。您应该避免在反应式编程中使用。block(),而使用。subscribe()或。flatmap()或其他运算符来从Mono或Flux对象获取数据。在这里阅读更多关于反应性编程和项目反应器(由spring webflux使用)的信息。

例如:

public Mono<Data> execute(NotificationMessage nm)
    return client.post().uri(builder -> builder.build())
                .header(HttpHeaders.USER_AGENT, "agent")
                .body(transactionMono, String.class).exchange()
                .flatMap(response -> {
                        HttpStatus code = response.statusCode();
                        Data data = response.bodyToMono(Data.class);
                        return data;
                });
}
 类似资料:
  • 我有以下代码: 如果我提供的所有参数都正确-enpoint会像邮递员应用程序一样返回200个http stsatus代码。 但是如果我提供了错误的url-我看到异常: 但是当我以同样的方式在postman中修改url时——我看到404错误: 我想有像邮递员一样的回应和像邮递员一样的回应。 如果我提供而不是,我会得到正确的,我可以在其中提取我想要的数据: 如何编写将提取和的通用代码? 重新模板初始化

  • 问题内容: 我试图一起使用以发出POST请求。到目前为止,我的代码: 它工作正常,但是,当发生HTTP错误时,会发出警告: 并返回false。有没有办法: 禁止显示警告(如果发生故障,我打算抛出自己的异常) 从流中获取错误信息(至少是响应代码) 问题答案: http://php.net/manual/en/reserved.variables.httpresponseheader.php

  • 我试图创建一个regex来捕获HTTP状态代码和curl请求的主体。下面的regex模式可以在多个在线站点上工作,但在我的Mac命令行上的shell if-语句中不匹配。是我的regex关闭了还是有其他事情发生? 我也对其他方法持开放态度(我的目标是运行Centos5的机器)。

  • 我正在使用JMeter执行负载测试,用户应该执行启动-登录- clk仪表板页面- clk登录页面(登录后出现的页面,即主页),其中clk仪表板和clk登录页面重复操作5次。 直到30个用户,当我增加用户负载时,我没有收到任何错误,我开始收到错误,因为 响应代码:非HTTP响应代码:org.apache.HTTP.conn.HttpHostConnectException响应消息:非HTTP回应消息

  • 问题内容: 我已经使用Selenium2 / WebDriver编写了测试,并且想要测试HTTP请求是否返回HTTP 403 Forbidden。 是否可以使用Selenium WebDriver获取HTTP响应状态代码? 问题答案: 一言以蔽之。无法使用Selenium WebDriver API。此问题已在项目的问题跟踪器中进行了讨论,该功能不会添加到API中。

  • 试图通过Jmeter为一系列用户提供 Rest API Web 服务。(20,30,50,80 个用户)。80% 的请求样本得到处理,但大约 20% 的样本出错,采样器结果下出现以下消息。 “响应代码:非HTTP响应代码:java.net.ConnectException响应消息:非HTTP回应消息:连接超时:连接”。 是Jmeter还是服务器端的问题?对此的解决方案是什么?