前言

最近项目中涉及端对端接口的调用,由于实时性要求不是很高和一些其他原因,采用了http协议的方式,使用HttpClient类来完成接口的调用,出现了一个非常奇怪的“fail to Respond”的问题。

正文

问题出现场景描述

本次采用的httpClient 类在之前项目中使用过,post 和 get 方法是可以完成顺利的接口调用的,本次调用的接口,用postman 调用是可以顺利调通的,但是在程序中用httpClient调用出现的问题却显得莫名其妙;
Postman 测试接口:显示调用正常

程序中调用部分代码:

        Gson gson = new Gson();// 设置接口参数EntranceRecordCommand cmd =EntranceRecordCloudCommand.builder().device_id(deviceId).data(cmdList).build();String jsonParam =  JSON.toJSONString(cmd);log.info("Param-{}", jsonParam);String result = null;try {// 接口调用result = HttpUtils.doPost( "http://10.18.132.87:8090/report/temperature?key=x5bY2tM&signature=ng8h3prl0va9q",jsonParam,"utf-8");log.info("result--{}",result);} catch (Exception e) {log.error("invoke exception!");}

HttpUtils中部分代码:

 public static String doPost(String url, String jsonStr, String charset) {HttpClient httpClient = null;HttpPost httpPost = null;String result = null;try {httpClient = acceptsUntrustedCertsHttpClient(); httpPost = new HttpPost(url);StringEntity entity = new StringEntity(jsonStr);httpPost.setEntity(entity);HttpResponse response = httpClient.execute(httpPost);if (response != null) {HttpEntity resEntity = response.getEntity();int statusCode = response.getStatusLine().getStatusCode();if (statusCode != HttpStatus.SC_OK) {log.error("invoke fail");return "";}if (resEntity != null) {result = EntityUtils.toString(resEntity, charset);}}} catch (Exception ex) {ex.printStackTrace();}return result;}

Idea中控制台信息

httpclient org.apache.http.NoHttpResponseException: 10.18.132.87:8090 failed to respond

问题解决

尝试一

一开始还以为是传输的json 参数的问题,换用了fastjson 这一 Json对象转换工具类,发现还是同样的问题;

尝试二

百度了一下,好多文章都在说连接失效问题,是要调大超时时间,发现我这情况并不同,我这里就一个http 链接,而且还没有到默认超时时间,所以这个行不通;

尝试三

改了下httpClient类中doPost方法的一个参数,问题解决!

 public static String doPost(String url, String jsonStr, String charset) {HttpClient httpClient = null;HttpPost httpPost = null;String result = null;try {httpClient = acceptsUntrustedCertsHttpClient(); httpPost = new HttpPost(url);// 原来代码StringEntity entity = new StringEntity(jsonStr);// 修改后代码,加了一个ContentType.APPLICATION_JSONStringEntity entity = new StringEntity(jsonStr, ContentType.APPLICATION_JSON);httpPost.setEntity(entity);HttpResponse response = httpClient.execute(httpPost);……

原因分析

因为doPost方法中第二个参数为接口需要的参数,是String 类型,而ContentType.APPLICATION_JSON 表明要发送到服务端的数据流主体是序列化的JSON字符串,所以要加一个contentType; 至于之前的为什么可以,我猜可能是跟这个接口有关,这个接口url 后面拼了requestParam的两个字段,可能是,抽空要再验证下。

总结

感谢您的耐心阅读,希望对您有些帮助!

解决httpClient 调用返回“ ip:port fail to respond ” 问题相关推荐

  1. 如何解决httpclient调用https请求报错

    public static CloseableHttpClient getClient() {SSLContext sslContext = null;try {sslContext = new SS ...

  2. IP:PORT failed to respond HttpClient 请求服务端报错

    此问题排查方向为连接本身的问题 比如:客户端使用连接池技术访问服务端,连接池默认情况下使用了长连接来避免每次建立连接消耗,从而提升性能,但是服务端设置了keepalive timeout ,服务端在规 ...

  3. 403 Forbidden You don‘t have permission to access this resource. Apache Server at IP Port 80的解决方法

    ECS下载站Forbidden You don't have permission to access this resource. Apache Server at IP Port 80的解决方法 ...

  4. 解决通过调用后台接口实现Excel导出功能,后台返回数据乱码的问题

    解决通过调用后台接口实现Excel导出功能,后台返回数据乱码的问题 问题如下: 这导致我虽然成功导出文件,但文件受损打不开 解决方案如下: 在调用接口加入: // 导出 export function ...

  5. 【远程调用返回400问题排查(已解决)】

    远程调用返回400问题排查 前言 发生问题由来 问题排查 1. 参数400 2. 请求头过大导致400 3. header异常400 总结 前言 我最近给公司一个两年前开发的项目售后,帮助客户验视功能 ...

  6. php获取ip 然后返回地址,PHP调用纯真IP数据库返回具体地址的方法

    我们在日常开发中友很多场景需要显示具体的IP地址,如果调用本地的IP的地址库,这就需要考虑IP地址库数据量的问题,所以我们一般会采用在线的IP地址查询,今天就把PHP如何调用本地的纯真IP地址数据的教 ...

  7. retryexec.java 94_解决feign调用接口不稳定的问题

    我就废话不多说了,大家还是直接看代码吧~ Caused by: java.net.SocketException: Software caused connection abort: recv fai ...

  8. SpringBoot调用第三方IP查询接口(Https)

    一:需求简介. 1.1项目中天添加IP归属地查询功能,前后端分离.后端返回给前端json字符串.      1.2使用阿里云免费的IP归属地查询接口.官网一下不太好找.下面图解演示一下,尽量节省时间吧 ...

  9. iOS自建DNS之后对IP+Port测速

    iOS自建DNS之后对IP+Port测速 传统的Local DNS域名解析的弊端 通过域名拿到IP之后,如何选用最快的一条链路 传统的Local DNS域名解析的弊端 客户端默认使用运营商的Local ...

最新文章

  1. 使用jQuery的9个误区
  2. GPT-3不算机器学习算法创新?2020年AI顶会最佳论文榜单引发激烈争论
  3. java读取欧姆龙plc_欧姆龙CJ2M系列PLC与PLC之间的数据相互读取设定
  4. 关于realarm S5P4418的u-boot显示内存大小问题解决方法
  5. [渝粤教育] 广东-国家-开放大学 21秋期末考试管理会计10171k2
  6. tanh python_带有Python示例的math.tanh()方法
  7. php 卡迪尔的秘密
  8. cpu负载转移内存_为什么将所有工作负载转移到云中是个坏主意
  9. 心理正常与异常的区分_【敬畏生命,拥抱生活】公政青协“善爱我”系列活动之如何识别心理正常与异常...
  10. [每日一题] 11gOCP 1z0-052 :2013-09-24 temporary tables.........................................C11...
  11. 装饰器python的通俗理解_Python装饰器的通俗理解
  12. 目标检测(六)--SPPNet
  13. python和其它语言混合编程_C++和Python混合编程 - python嵌入C++
  14. 计算机没wps云档怎么办,WPS云空间多大?WPS云文档空间已经用满怎么办?删数据或买VIP-太平洋电脑网...
  15. UrlRewrite的使用
  16. 嵌入式linux应用开发完全手册(一)
  17. 【ML】从特征分解,奇异值分解到主成分分析
  18. 成功在神舟K650c-i7 d2(i7-4700MQ、HM87)上装好了Windows XP
  19. 谨以此文,献给我的大学四年—双非本科到双一流985的成长之路
  20. PHP 将两个数组合并,保持原有key,并保持在同一个维度

热门文章

  1. Zynq7000开发系列-1(Vivado HLx 2016.4下载及安装)
  2. python mask_python_mask_array的用法
  3. SSL证书申购指南教程
  4. 黑人是晒黑的吗_Indibiome是新的黑人
  5. Pycharm 报错Out of Memory 然后一直闪退(已解决)
  6. 嫌疑人x的献身-----一些想法
  7. 浅析CV下的无人驾驶技术
  8. 基于Node.js + jade + Mongoose 模仿gokk.tv
  9. 谁应该去读 C++ Programming Language
  10. 利用非qq号码的QQ邮箱来获取qq号