HTTP請求返回415錯誤碼定位解決方法
今天在工作中,發(fā)現(xiàn)我再調(diào)用外部API接口的時候,發(fā)現(xiàn)一個奇怪的問題,就是我Eclipse中寫代碼調(diào)用外部API接口時返回HTTP狀態(tài)碼是415,但是我將相同的報文放在HttpRequester里面請求的時候卻又可以拿到正常返回結(jié)果,而不是415錯誤。
不知道有沒有人跟我一樣遇到過這個問題,這里記錄一下解決辦法。
首先我們還是看下HTTP的狀態(tài)碼關(guān)于415返回碼的說明吧。
| 415 | Unsupported Media Type | 服務(wù)器無法處理請求附帶的媒體格式 |
乍看之下,當(dāng)時并沒有看出來是什么意思,后來通過度娘搜索了下,覺得應(yīng)該是跟發(fā)送HTTP報文的請求頭中的Content-Type有關(guān)。于是,我嘗試了下,在Eclipse中的Java代碼中,在發(fā)送Http請求時帶上了相應(yīng)的頭字段,如下所示:
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());
}
}
通過執(zhí)行測試,發(fā)現(xiàn)問題真的解決了。但是為什么我在HttpRequester中沒有自己設(shè)置頭字段卻可以正常拿到返回報文,為了解決這個疑問,我決定對HttpRequester發(fā)送出去的報文進(jìn)行抓包分析,下面是抓包的結(jié)果。

這時候才發(fā)現(xiàn)原來根本原因在這呢,應(yīng)該是HttpRequester在發(fā)送請求的時候幫我們自己去做了一些處理,如果發(fā)送的是json數(shù)據(jù)自動幫我們加上了Content-Type字段的聲明,從而能夠正常返回結(jié)果。而在Java代碼發(fā)送的時候,通過抓包我們發(fā)現(xiàn)是沒有這個頭字段的(當(dāng)然沒有,因?yàn)槲覀儔焊鶝]有給他設(shè)置這個頭字段)。
至此,關(guān)于這個問題算是解決了,但是回過頭來想,415又是什么意思呢?
個人覺得應(yīng)該是我們嘗試發(fā)送的數(shù)據(jù)是一定數(shù)據(jù)格式的,比如json,比如xml等等,這時候需要告訴處理方我們發(fā)送的是什么樣的數(shù)據(jù),如果沒有告訴的話接收方可能就直接拒識了,這時候我們只要根據(jù)實(shí)際情況給數(shù)據(jù)接收方提供發(fā)送報文的數(shù)據(jù)格式應(yīng)該就可以了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java asp分析各種搜索引擎的關(guān)鍵字,自動識別url 中關(guān)鍵字的編碼
網(wǎng)上也有一些代碼,大部分都是通過輸入的關(guān)鍵字來識別編碼,并解碼。但是搜索引擎得到的referer來源地址上的關(guān)鍵字是通過URLencode編碼過的,而且各個網(wǎng)站的關(guān)鍵字Urlencode編碼都不一樣,gbk,utf-8,gb2312等等。2009-01-01
使用阿里大于(大魚)平臺進(jìn)行發(fā)送手機(jī)驗(yàn)證碼的流程
這篇文章主要介紹了使用阿里大于(大魚)平臺進(jìn)行發(fā)送手機(jī)驗(yàn)證碼的流程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
10分鐘搞定讓你困惑的 Jenkins 環(huán)境變量過程詳解
這篇文章主要介紹了10分鐘搞定讓你困惑的 Jenkins 環(huán)境變量過程詳解,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
設(shè)計(jì)引導(dǎo)--一個鴨子游戲引發(fā)的設(shè)計(jì)理念(多態(tài),繼承,抽象,接口,策略者模式)
設(shè)計(jì)引導(dǎo)--一個鴨子游戲引發(fā)的設(shè)計(jì)多態(tài),繼承,抽象,接口,策略者模式;這篇博文是從實(shí)際生活中,提煉出來的設(shè)計(jì)理念,它現(xiàn)在是骨架,現(xiàn)在我加以代碼實(shí)例,完成程序的血肉,以求讓大家活生生的體會設(shè)計(jì)中的精髓2013-01-01
最適合人工智能開發(fā)的5種編程語言 附人工智能入門書籍
這篇文章主要為大家詳細(xì)介紹了最適合人工智能開發(fā)的5種編程語言,并為大家推薦人工智能入門書籍,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11

