HttpClient调用报错NoHttpResponseException: host:端口 failed to respond 错误原因和解决方法

HttpClient调用

首先我是在公司需求是要集成一个tts(文本转语言),然后调用我们引擎组写的接口,我这边用的是httpclient的post方式,写完之后用postman调用,一点问题没有,很完美,然后打包给测试,在应用上调用发现,断断续续,一段话,有的返回成功,有的则不返回

我这边的场景是,循环调用,如果只是一次调用,可能就不会有这个问题了

先看下报错信息

org.apache.http.NoHttpResponseException: host:端口 failed to respond

原因
我也是在网上看到一篇博客说的原因是
httpclient 之前与服务端建立的链接已经失效(例如:tomcat 默认的keep-alive timeout :20s),再次从连接池拿该失效链接进行请求时,就会报错
postman一点问题没有可能是postman兼容性比较强?(这里我也不知道为什么)
解决方案:

ConnectionKeepAliveStrategy myStrategy = (response, context) -> {
            Args.notNull(response, "HTTP response");
            final HeaderElementIterator it = new BasicHeaderElementIterator(
                    response.headerIterator(HTTP.CONN_KEEP_ALIVE));
            while (it.hasNext()) {
                final HeaderElement he = it.nextElement();
                final String param = he.getName();
                final String value = he.getValue();
                if (value != null && param.equalsIgnoreCase("timeout")) {
                    try {
                        return Long.parseLong(value) * 1000;
                    } catch (final NumberFormatException ignore) {
                    }
                }
            }
            return 1;
        };


       CloseableHttpClient client = HttpClientBuilder.create()
                .setConnectionManager(connectionManager)
                .setKeepAliveStrategy(myStrategy)
                .setDefaultRequestConfig(config)
                .build();

setKeepAliveStrategy(myStrategy)
其实就是增加了一个策略KeepAliveStrategy
然后就完美解决了

以上是我在工作中的真实场景,如果大家有遇到同样的,或者有更好的解决办法,可以评论一下,感谢大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值