java POST接口报错417

背景:开发语言JAVA,POST供应商HTTP接口时发现报错417,但是使用POSTMAN连接接口又可以连接上

处理步骤
1.首先百度搜索了这种报错的原因,主要有以下原因:
(1)与HTTP1.1中100-continue协议有关
(2)服务器或接口有限制
2.因为多数博客都说与100协议有关,与是开始查阅相关资料,基本都是说在请求头中添加Expect为100-Continue,
httppost.setHeader(“Expect”, “100-Continue”);
于是添加后再次测试,发现还是报错417,再将该请求头设置为空,还是报错,说明报错与这个无关。
3.考虑接口限制的问题,首先去请教了公司的技术顾问,得知这类错误引发可能是
(1)一个接口被访问多次但全从一个response出去导致
(2)100-Continue协议导致
(3)也可能是实际结果不符合预期结果导致
4.向对接的供应商询问了接口是否有限制,供应商表示没有限制
5.思路到这里断了,于是换了一个httpclient的jar包另外再写了一个POST接口的方法,这次除了收到了417报错状态码,还收到了回执:报文内容为空,请检查报文内容或者编码是否有误。
6.看到这个回执,想到了他们接口好像只能接收XML格式的报文,之前在请求头设置了XML格式,
httppost.setHeader(“Content-Type”, “application/xml”);
但是不是还需要再为报文内容设置一次,于是尝试了一下,
StringEntity se = new StringEntity(xml, “utf-8”);
se.setContentType(“application/xml”); // 设置数据类型 不加会报错
设置完后发现果然接通了,收到了回执
7.完整POST接口方法如下:
import org.apache.http.client.config.RequestConfig;
import org.json.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;

/**
* 发送HTTP
*
* @param xml 报文
* @param url 地址
* @param params 授权信息
* @return
*/
public static net.sf.json.JSONObject sendHttp(String xml, String url, HashMap<String, String> params) {
net.sf.json.JSONObject res = new net.sf.json.JSONObject();
try {
HttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(url);
// httppost.setHeader(“Expect”, “100-Continue”);
// httppost.setHeader(“Content-Type”, “application/xml”);
for (String key : params.keySet()) { // 设置授权参数
httppost.setHeader(key, params.get(key));
}
//其内容是接收方需要的参数和消息内容
StringEntity se = new StringEntity(xml, “utf-8”);
se.setContentType(“application/xml”); // 设置数据类型 不加会报错417
httppost.setEntity(se);
// 设置请求和传输超时时间 单位毫秒
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();
httppost.setConfig(requestConfig);
HttpResponse response = httpclient.execute(httppost);
System.out.println(response);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result_xml = org.apache.http.util.EntityUtils.toString(response.getEntity(), “utf-8”);
res.put(“state”, “success”);
res.put(“message”, result_xml);
} else {
res.put(“state”, “fail”);
res.put(“message”, “发送失败,请检查接口地址和验证信息是否正确”);
}
} catch (Exception e) {
res.put(“state”, “fail”);
res.put(“message”, “发送失败,” + e.toString());
}
return res;
}

参考网址:
【1】https://blog.csdn.net/weixin_30496751/article/details/99464929
【2】https://blog.csdn.net/ahzxj2012/article/details/52510491

java POST接口报错417相关推荐

  1. 钉钉接口报错java.net.UnknownHostException: oapi.dingtalk.com_无法访问oapi.dingtalk.com

    钉钉接口报错java.net.UnknownHostException: oapi.dingtalk.com_无法访问oapi.dingtalk.com 简述 报错详细内容 解决方法 简述 配置钉钉机 ...

  2. 使用eclipse查看java源码报错source not found

    使用eclipse查看java源码报错source not found的解决办法 问题: 编写java代码时想要查看调用的系统的类或者接口时,使用快捷键(按住Ctrl,单击类或接口名)报错source ...

  3. Java访问Elasticsearch报错Request cannot be executed; I/O reactor status: STOPPED

    简介 使用ES过程中遇到一个Request cannot be executed; I/O reactor status: STOPPED 的异常,大概意思是和server端的连接异常终止了.开始以为 ...

  4. vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理)

    vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) 参考文章: (1)vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理) (2)https://www. ...

  5. 使用cmd打开java文件,报错:“错误,编码GBK的不可映射字符”

    使用cmd打开java文件,报错:"错误,编码GBK的不可映射字符" 今天使用EditPlus写了一个小程序,用cmd运行时报错--"错误,编码GBK的不可映射字符&qu ...

  6. java exec执行tar_用java调用rpmbuild 报错,同一条命令直接复制到终端却能运行

    用java调用rpmbuild 报错,同一条命令直接复制到终端却能运行. 命令如下: rpmbuild --define "_topdir /var/lib/jenkins/workspac ...

  7. Linux运行Java出现“Exception in thread main java.lang.OutOfMemoryError: Java heap space”报错...

    在运行如下程序时出现"Exception in thread "main" java.lang.OutOfMemoryError: Java heap space&quo ...

  8. 图解Myeclipse 导入Java Web项目报错的解决办法听语音

    图解Myeclipse 导入Java Web项目报错的解决办法听语音 https://jingyan.baidu.com/article/046a7b3e953ef3f9c27fa93d.html

  9. 使用 Feign 调用分页接口报错:Method has too many Body parameters(亲测)

    一.背景 接口定义: @ApiOperation(value = "分页查询会话") @PostMapping(Routes.SESSIONS_QUERY) JsonResult& ...

  10. java小白日常报错

    java小白日常报错 CRM项目中使用逆向工程生成mappper.xml文件.pojo文件.和mapper文件时产生的错误* 作为一个java小白人,开始学习写博客,一个是为了为了记笔记,另一个是为了 ...

最新文章

  1. pyhton 画出音频文件的波形图和频谱图
  2. datagrid资料+ by iCeSnaker - Program rhapsody
  3. 面向对象的模型设计方法
  4. 仿简书、淘宝等等App的View弹出效果
  5. rbac 权限分配, 基于formset实现,批量增加
  6. 高,低电平复位电路原理及加电容的作用
  7. Project 3 resources reassigned !!!
  8. DFA敏感词过滤算法详解
  9. 计算机网络(谢希仁版)知识点汇总
  10. Oracle:经典例题解析
  11. 更换一个已到使用寿命的墨盒--Epson
  12. cherry Tree的严重漏洞
  13. src中的 “/”、“./”与“../”
  14. 使用蒙特卡洛技术解决一个小虫爬铁丝问题。
  15. 5G——万物互联新时代
  16. VS2015和VS2017运行项目时,未能找到路径“……\bin\roslyn\csc.exe”的解决方案
  17. window服务安装、卸载
  18. 程序猿如何练习用英语讲好一个笑话?
  19. Glide 入门到精通之十八——Module 实例:用自定义尺寸优化加载的图片
  20. 通过独立站打开新市场

热门文章

  1. 37页pdf,埃默里大学最新「大数据时代事件预测」综述,ACM顶级期刊上发表
  2. Minecraft mod制作简易教程(一)——配置工作环境
  3. 服务器搭建ftp共享文件夹,设置共享文件夹或者搭建FTP服务器。
  4. laravel8+jwt+邮箱注册验证
  5. 论文笔记:PaintsTorch: a User-Guided Anime Line Art Colorization Tool
  6. 随机过程基础1--随机过程与宽平稳
  7. QT实现USB热插拔监控
  8. MySQL性能瓶颈以及优化
  9. 20常见的手机问题及其解决方案
  10. 华为手机解析出现问题