Java跨域請求

最近在公司需要在第三方服務器上獲取一些數據,可是公司和其他公司沒有合作關係,只能通過發送跨域請求來獲取了。通過整理,將其寫成一個API接口,需要傳入四個參數
1、reqType:請求方式,post和get請求
2、reqHeaders:請求頭的設置,因爲在做的時候會對請求頭有一定的設置
3、reqParam:請求參數(post)
4、reqUrl:請求地址

下面就是我寫的方法
使用的API有
URL:匹配連接
URLconnecti : 建立連接
注意點:
1、在發送post請求時,需要將URLconnection的setDoinput和setDooutput設置爲true;
2、URLconnection的connect()方法其實在進行輸出流時就隱試的調用了

代碼

package cn.saleNc.uitl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;

public class urlConnect {
    /**
     *
     * @param requrl       請求地址
     * @param reqparam     請求參數
     * @param reqHeaders   請求頭
     * @param reqType       請求方式
     * @return
     */
    public static String reqGet(String requrl, String reqparam, String reqHeaders, String reqType ){
        String result = "";
        BufferedReader in = null;
        PrintWriter out = null;
        //真實的請求地址
        String realUrl = "";

        //判斷是哪種請求方式(默認以get請求方式)
        if ( "post" == reqType ){
            realUrl = requrl;
            try {
                URL url = new URL(realUrl);
                //打開URL連接
                URLConnection urlCon = url.openConnection();
                //設置請求頭(判斷請求頭是否有設置的必要)
                if ( reqHeaders.isEmpty() ){
                    String reqHeadersParam = reqHeaders.substring(1,reqHeaders.length());
                    String[] paramArr = reqHeadersParam.split(",");
                    String[] keyValue;
                    for (int n=0;n<paramArr.length;n++){
                        keyValue = paramArr[n].split(":");
                        urlCon.setRequestProperty(keyValue[0],keyValue[1]);
                    }
                }
                //設置下面兩行才能發送post請求(因爲post需要在URL通道中發送數據)
                urlCon.setDoInput(true);
                urlCon.setDoOutput(true);
                //獲取輸出流
                out = new PrintWriter(urlCon.getOutputStream());
                //fluse輸出流
                out.flush();
                //獲取服務器的輸入流
                in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
                String param;
                while ( (param = in.readLine()) != null ){
                    result += param;
                }

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                out.close();
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }else {
            try {
                realUrl = realUrl + "?" + reqparam;
                URL url = new URL(realUrl);
                // 打開和URL之間的連接
                URLConnection connection = url.openConnection();
                // 建立實際的連接
                connection.connect();
                // 定義 BufferedReader輸入流來讀取URL的響應
                in = new BufferedReader(new InputStreamReader(
                        connection.getInputStream()));
                String param;
                while ((param = in.readLine()) != null) {
                    result += param;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 使用finally塊來關閉輸入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        }

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