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

HTTP请求返回415错误码定位解决今天在工作中,发现我再调用外部API接口的时候,发现一个奇怪的问题,就是我Eclipse中写代码调用外部API接口时返回HTTP状态码是415,但是我将相同的报文放在HttpRequester里面请求的时候却又可以拿到正常返回结果,而不是415错误。不知道有没有人跟我一样遇到过这个问题,这里记录一下解决办法。首先我们还是看下HTTP的状态码关于415返回码的说明吧。41

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

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

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

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

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

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

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发送出去的报文进行抓包分析,下面是抓包的结果。

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 整合Druid—SpringBoot[通俗易懂]

    整合Druid—SpringBoot[通俗易懂]整合Druid(数据源)Druid简介Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。Druid是阿里巴巴开源平台上一个数据库连接池实现,结合了C3P0、DBCP等DB池的优点,同时加入了日志监控。Druid可以很好的监控DB池连接和SQL的执行情况,天生就是针对监控而生的DB连接池。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。SpringBoot2.0以上默认使用Hikari

    2022年7月23日
    12
  • 二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))

    二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))

    2022年1月11日
    45
  • mysql截取数字_mysql 截取字符串中的数字

    mysql截取数字_mysql 截取字符串中的数字展开全部selectREVERSE(right(REVERSE(filename),length(filename)-LEAST(if(Locate(‘0’,REVERSE(filename))>0,Locate(‘0’,REVERSE(filename)),999),if(Locate(‘1’,REVERSE(filename))>0,Locate(‘1’,REVERSE(f…

    2022年6月3日
    90
  • 设置document.cookie的使用[通俗易懂]

    设置document.cookie的使用[通俗易懂]设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cookie=”userId=828″;如果要一次存储多个名/值对,可以使用分号加空格(;)隔开,例如:document.cookie=”userId=828;userName=hulk”;在cookie的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格。

    2022年7月11日
    47
  • strstr函数实现

    strstr函数实现strstr()函数用来查找子串的首地址,函数实现如下:char*strstr(char*str1,char*str2){ char*p1=NULL; char*p2=NULL; while(*str1) { p1=str1; p2=str2; while(*p1==*p2&&*p2!=NULL) { p1++; p2…

    2022年6月25日
    32
  • 电脑鼠标能动但点什么都没反应_联想台式机鼠标键盘没反应

    电脑鼠标能动但点什么都没反应_联想台式机鼠标键盘没反应1.联想电脑鼠标盘没反应是怎么回事1.打开笔记本电脑,没有任何提示,但触摸板触摸完全没有反应。这时候要确保触摸屏不是锁上了,触摸屏锁上了就会完全没有反应,这个解决办法很简单,笔记本一般按住Fn(功能键)+F6(不同的笔记本不同的按键,按键上有触摸板图像)即可解锁。有些笔记本有独立的触摸屏开锁键,注意看看哪个键有个小键盘在上面的即可。2.软件问题主要说的是驱动出现问题,例如刚刚重新安装过电脑…

    2022年9月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号