415
今天在工作中,发现我再调用外部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发送出去的报文进行抓包分析,下面是抓包的结果。
这时候才发现原来根本原因在这呢,应该是HttpRequester在发送请求的时候帮我们自己去做了一些处理,如果发送的是json数据自动帮我们加上了Content-Type字段的声明,从而能够正常返回结果。而在java代码发送的时候,通过抓包我们发现是没有这个头字段的(当然没有,因为我们压根没有给他设置这个头字段)。
至此,关于这个问题算是解决了,但是回过头来想,415又是什么意思呢?
个人觉得应该是我们尝试发送的数据是一定数据格式的,比如json,比如xml等等,这时候需要告诉处理方我们发送的是什么样的数据,如果没有告诉的话接收方可能就直接拒识了,这时候我们只要根据实际情况给数据接收方提供发送报文的数据格式应该就可以了。
相关阅读
第一章:华为云计算解决方案 本章主要讲述了华为云计算的不同解决方案。介绍了服务器虚拟化、数据中心、桌面云、公有云
Error: Not found; no service started.问题解决
昨天还运行的好好的项目,今天打开突然就报这个异常。09/17 20:48:16: Launching app$ adb shell am startservice kang.yi.zhi.tan
【解决方案】chrome打开新标签页自动打开chrome://new
简述 天,昨天开始遇到这个问题,还没有留心,结果今天多次使用chrome的时候,就发现有些不对了。。打开chrome的新标签页,结果出现了自动
【测试步骤】:1、进入短信界面2、菜单-设置3、修改短信中心号码(Set the SIM's smsc number) 保存【测试结果】:提示保存成功,但是号码
php 解决file_get_contents函数抓取数据报错问题
大家用file_get_contents这个php函数抓取数据,可能出现各种莫名其妙的错,小编今天就把我曾经报错解决的方式总结如下: 方法一:找到php