本文主要介绍HTTP请求返回415错误代码定位解决方案,通过示例代码非常详细的介绍。对大家的学习或工作都有一定的参考价值。有需要的朋友下面跟边肖学习。
今天工作中,我发现当我再次调用外部API接口时,发现了一个奇怪的问题,就是当我在Eclipse中编写代码调用外部API接口时,返回的HTTP状态码是415,但是当我在HttpRequester中放入同样的消息进行请求时,可以得到正常的返回结果,而不是415错误。
不知道有没有人和我一样遇到过这个问题。下面是解决方案。
首先我们来看看HTTP关于415返回码的状态码描述。
415
不支持的媒体类型
服务器无法处理附加到请求的媒体格式。
乍一看,当时没看出来是什么意思。后来通过度娘搜索,觉得应该和发送HTTP消息的请求头中的Content-Type有关。所以,我试了一下。在Eclipse的Java代码中,发送Http请求时会带来相应的header字段,如下所示:
公共类测试{
公共静态void main(String[] args)引发IOException {
string URL=' http://IP:port/CIP-cas/search ';
Senddata=' {'appid':' * * ',' contentname ':'以人的名义',' equipmentid':' * *,' requestseq':' * *,' requesttype':' 1 ',' userid':' * * *
StringBuilder result builder=new StringBuilder();
MapString,String headers=new HashMapString,String();
headers.put('Content-Type ',' application/JSON;charset=utf-8 ');
UrlConnectionHelper.post(url,sendData,' UTF-8 ',8000,headers,result builder);
system . out . println(result builder . tostring());
}
}
通过测试,发现问题确实解决了。但是为什么在HttpRequester中不设置header字段也能正常得到返回消息?为了解决这个问题,我决定分析HttpRequester发送的消息的数据包捕获。这是数据包捕获的结果。
这时我才发现,原来根本原因是这样的。应该是HttpRequester在发送请求的时候帮我们做了一些处理。如果发送json数据,它会自动为我们添加Content-Type字段的声明,这样就可以正常返回结果。Java代码发送时,我们通过包捕获发现没有这个头字段(当然没有,因为我们根本没有给他设置这个头字段)。
到目前为止,这个问题已经解决了,但是回过头来看,415是什么意思呢?
我个人认为应该是我们试图发送的数据是某种数据格式的,比如json,xml等。这时,我们需要告诉处理器我们发送的是什么类型的数据。如果我们不告诉它,接收者可能会直接拒绝知道它。这时候我们只需要根据实际情况提供给数据接收方发送消息的数据格式就可以了。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。