最近項(xiàng)目新接一家供應(yīng)商狂芋,接口上的對(duì)接,使用CloseableHttpClient的工具類如下:
public class YxApiUtil {
private static final Log log = LogFactory.getLog(YxApiUtil.class);
public static YxCommonRes doPost(String url,TreeMap<String, String> paramsMap) throws Exception {
YxCommonRes yxRetCommonRes = new YxCommonRes();
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(url);
CloseableHttpResponse response = null;
final List<NameValuePair> values = new ArrayList<NameValuePair>();
try {
for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
values.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
httppost.setEntity(new UrlEncodedFormEntity(values, HTTP.UTF_8)); //進(jìn)行轉(zhuǎn)碼
//httppost.addHeader("ContentType", "application/x-www-form-urlencoded;charset=UTF-8");
log.info("doPostNew()-->param:"+values);
log.info("doPostNew()-->call url <"+ url +"> start");
response = httpclient.execute(httppost);
int code = response.getStatusLine().getStatusCode();
log.info("doPostNew()-->http resposeCode is:" + code);
if (HttpURLConnection.HTTP_OK == code) {
String resEntity = EntityUtils.toString(response.getEntity(), "UTF-8");
log.info("doPostNew()-->resEntity is:" + resEntity);
JSONObject jSonObject_first = JSON.parseObject(resEntity);
yxRetCommonRes = JSONObject.toJavaObject(jSonObject_first, YxCommonRes.class);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
response.close();
log.info("doPostNew()-->end");
}
return yxRetCommonRes;
}
}
由于供應(yīng)商有區(qū)分測(cè)試環(huán)境和正式線網(wǎng)環(huán)境憨栽,前期代碼也都通過了測(cè)試環(huán)境的測(cè)試帜矾,前天正式上線之后,請(qǐng)求就一直不通屑柔,而且報(bào)出下面錯(cuò)誤:
org.apache.http.client.ClientProtocolException
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
....
- 因?yàn)楣?yīng)商那邊有配置請(qǐng)求的IP白名單屡萤,找了供應(yīng)商對(duì)接人發(fā)現(xiàn)IP是配的我們線上機(jī)器的。排除....
- 然后覺得可能是我們這邊請(qǐng)求機(jī)器網(wǎng)絡(luò)有問題掸宛,所以找了運(yùn)維的同事在線網(wǎng)機(jī)器通過命令行請(qǐng)求死陆,結(jié)果是通的。
這時(shí)候就很奇怪了唧瘾。并不是網(wǎng)絡(luò)層面的問題措译,但是代碼方面測(cè)試環(huán)境有沒有問題呀。然后同事就讓我去檢查下線網(wǎng)數(shù)據(jù)庫中是不是請(qǐng)求的地址填錯(cuò)了或者填的地址里面有空格什么的饰序。然后我去翻了一遍郵件找到了對(duì)方給的請(qǐng)求地址:xxxxx.xxx.xxx.com/xxxxx/api.json
格式就是這樣领虹,然后跟著線網(wǎng)數(shù)據(jù)庫中配置的地址一個(gè)個(gè)的對(duì)照,都是一樣的求豫,也不存在什么空格塌衰。后面就各種百度,發(fā)現(xiàn)也都與我遇到的不太匹配蝠嘉。
然后一上午沒有解決最疆,就很藍(lán)瘦,很困惑蚤告。抱著無助的困惑我又各種檢查努酸,然后在看線網(wǎng)的數(shù)據(jù)庫時(shí)就發(fā)現(xiàn),唉杜恰!別的請(qǐng)求地址好像前面都有加 http://
協(xié)議頭 获诈,再看看這個(gè)沒有,當(dāng)時(shí)我就覺得肯定是這個(gè)問題了箫章,然后在請(qǐng)求地址前上加上了協(xié)議頭烙荷,然后镜会,事就這樣成了檬寂!
記下這次的坑,希望能夠幫到以后遇到問題的同學(xué)們戳表,但是我還真不知道加不加http協(xié)議頭到底有什么區(qū)別桶至,我也自己測(cè)試過昼伴,我本機(jī)兩個(gè)項(xiàng)目一個(gè)項(xiàng)目寫了一個(gè)接口,另外一個(gè)項(xiàng)目通過同樣的方式請(qǐng)求镣屹,查了自己本機(jī)的IP地址圃郊,然后請(qǐng)求路徑就沒有加http://請(qǐng)求發(fā)現(xiàn)也是通的,這就很奇怪女蜈。也希望有更加深度了解些的大佬給評(píng)論下是怎么回事持舆。
哈哈,今天就要跑路回家了伪窖,也祝各位新年快樂R菰ⅰ!年年漲工資(撒花)8采健V裆臁!簇宽!