前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >HTTP请求返回415错误码定位解决

HTTP请求返回415错误码定位解决

作者头像
全栈程序员站长
发布2022-07-01 21:07:39
发布2022-07-01 21:07:39
3.5K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

今天在工作中,发现我再调用外部API接口的时候,发现一个奇怪的问题,就是我Eclipse中写代码调用外部API接口时返回HTTP状态码是415,但是我将相同的报文放在HttpRequester里面请求的时候却又可以拿到正常返回结果,而不是415错误。

不知道有没有人跟我一样遇到过这个问题,这里记录一下解决办法。

首先我们还是看下HTTP的状态码关于415返回码的说明吧。

415

Unsupported Media Type

服务器无法处理请求附带的媒体格式

乍看之下,当时并没有看出来是什么意思,后来通过度娘搜索了下,觉得应该是跟发送HTTP报文的请求头中的Content-Type有关。于是,我尝试了下,在Eclipse中的Java代码中,在发送Http请求时带上了相应的头字段,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
public class Test { public static void main(String[] args) throws IOException { String url = "http://ip:port/cip-cas/search"; String sendData = "{\"appId\":\"***\",\"contentName\":\"人民的名义\",\"equipmentId\":\"***\",\"requestSeq\":\"***\",\"requestType\":\"1\",\"userId\":\"***\"}"; StringBuilder resultBuilder = new StringBuilder(); Map<String,String> headers = new HashMap<String,String>(); headers.put("Content-Type", "application/json; charset=utf-8"); UrlConnectionHelper.post(url, sendData, "UTF-8", 8000, headers, resultBuilder); System.out.println(resultBuilder.toString()); } }

通过执行测试,发现问题真的解决了。但是为什么我在HttpRequester中没有自己设置头字段却可以正常拿到返回报文,为了解决这个疑问,我决定对HttpRequester发送出去的报文进行抓包分析,下面是抓包的结果。

这时候才发现原来根本原因在这呢,应该是HttpRequester在发送请求的时候帮我们自己去做了一些处理,如果发送的是json数据自动帮我们加上了Content-Type字段的声明,从而能够正常返回结果。而在Java代码发送的时候,通过抓包我们发现是没有这个头字段的(当然没有,因为我们压根没有给他设置这个头字段)。

至此,关于这个问题算是解决了,但是回过头来想,415又是什么意思呢?

个人觉得应该是我们尝试发送的数据是一定数据格式的,比如json,比如xml等等,这时候需要告诉处理方我们发送的是什么样的数据,如果没有告诉的话接收方可能就直接拒识了,这时候我们只要根据实际情况给数据接收方提供发送报文的数据格式应该就可以了。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130317.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档