記錄下關於調用接口的一些問題和心得
前言,在開發時常常要調用其他項目的接口或者給其他項目(系統)傳遞參數,這裏記錄下遇到的一些問題和解決思路和過程。
1,請求跨域問題
出現於ajax請求後端的接口
解決方案:
1,使用jsonp方式請求,但是隻能解決get請求,而不能解決post請求,而如果設置了dataType爲post,如果檢測到有跨域問題也會自動轉爲get請求,不是很常用
2,使用nginx反向代理,本人未實現此方法,但查各種論壇確實可行
3,後端設置響應頭
總結:調用接口一般還是通過後端去調用,因爲跨域請求其實是瀏覽器出於安全考慮而設計的(不知道這麼說對不對),但總而言之,還是不要直接用ajax直接去訪問可能存在跨越問題的接口
2,httpClient
我之前的文章已經寫過同時傳輸參數和文件了,這次遇到的問題要傳遞的是form-data格式的數據而不是json數據,廢話不說上代碼
public static Result sendData(String userId,String keyWord,String type){
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(BaseParameter.HOTKEYWORDSURL+"/userLabel/add");
httpPost.addHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
httpPost.setHeader("Accept", "application/json");
Result result = new Result();
result.setFlag(false);
result.setMessage("傳輸失敗");
JSONObject jsonObject = new JSONObject();
jsonObject.put("userId",userId);
jsonObject.put("keyWord",keyWord);
jsonObject.put("type",type);
String formData = "userId="+userId+"&keyWord="+keyWord+"&type="+type;
StringEntity stringEntity = new StringEntity(formData,"UTF-8");
try {
httpPost.setEntity(stringEntity);
CloseableHttpResponse response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
result.setCode(statusCode);
if(statusCode == 200){
result.setFlag(true);
result.setMessage("傳輸成功");
}
return result;
} catch (IOException e) {
e.printStackTrace();
return result;
}
}
String formData = “userId=”+userId+"&keyWord="+keyWord+"&type="+type;
form表單類似於https://editor.csdn.net/md?articleId=105688049 這種