記錄下關於調用接口的一些問題和心得

記錄下關於調用接口的一些問題和心得

前言,在開發時常常要調用其他項目的接口或者給其他項目(系統)傳遞參數,這裏記錄下遇到的一些問題和解決思路和過程。
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 這種

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章