1. 程式人生 > >http請求工具類--Java

http請求工具類--Java

   專案中需要通過傳送http請求呼叫一個介面,因此用到了下面的工具類:

get請求:

 public static String sendGet(String url, Map<String, String> parameters) { 
        String result="";
        BufferedReader in = null;// 讀取響應輸入流  
        StringBuffer sb = new StringBuffer();// 儲存引數  
        String params = "";// 編碼之後的引數
        try {
            // 編碼請求引數  
            if(parameters.size()==1){
                for(String name:parameters.keySet()){
                    sb.append(name).append("=").append(
                            java.net.URLEncoder.encode(parameters.get(name),  
                            "UTF-8"));
                }
                params=sb.toString();
            }else{
                for (String name : parameters.keySet()) {  
                    sb.append(name).append("=").append(  
                            java.net.URLEncoder.encode(parameters.get(name),  
                                    "UTF-8")).append("&");  
                }  
                String temp_params = sb.toString();  
                params = temp_params.substring(0, temp_params.length() - 1);  
            }
            String full_url = url + "?" + params; 
            System.out.println(full_url); 
            // 建立URL物件  
            java.net.URL connURL = new java.net.URL(full_url);  
            // 開啟URL連線  
            java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL  
                    .openConnection();  
            // 設定通用屬性  
            httpConn.setRequestProperty("Accept", "*/*");  
            httpConn.setRequestProperty("Connection", "Keep-Alive");  
            httpConn.setRequestProperty("User-Agent",  
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");  
            // 建立實際的連線  
            httpConn.connect();  
            // 響應頭部獲取  
            Map<String, List<String>> headers = httpConn.getHeaderFields();  
            // 遍歷所有的響應頭欄位  
            for (String key : headers.keySet()) {  
                System.out.println(key + "\t:\t" + headers.get(key));  
            }  
            // 定義BufferedReader輸入流來讀取URL的響應,並設定編碼方式  
            in = new BufferedReader(new InputStreamReader(httpConn  
                    .getInputStream(), "UTF-8"));  
            String line;  
            // 讀取返回的內容  
            while ((line = in.readLine()) != null) {  
                result +=line;  
            }  
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {  
                if (in != null) {  
                    in.close();  
                }  
            } catch (IOException ex) {  
                ex.printStackTrace();  
            }  
        }
        return result ;
    }  

post請求:
/**
     * 向指定 URL 傳送POST方法的請求
     * 
     * @param url
     *            傳送請求的 URL
     * @param param
     *            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。
     * @param isproxy
     *               是否使用代理模式
     * @return 所代表遠端資源的響應結果
     */
    public static String sendPost(String url, String param,boolean isproxy) {
        OutputStreamWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            HttpURLConnection conn = null;
            if(isproxy){//使用代理模式
                @SuppressWarnings("static-access")
                Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
                conn = (HttpURLConnection) realUrl.openConnection(proxy);
            }else{
                conn = (HttpURLConnection) realUrl.openConnection();
            }
            // 開啟和URL之間的連線

            // 傳送POST請求必須設定如下兩行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setRequestMethod("POST");    // POST方法


            // 設定通用的請求屬性

            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            conn.connect();

            // 獲取URLConnection物件對應的輸出流
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            // 傳送請求引數
            out.write(param);
            // flush輸出流的緩衝
            out.flush();
            // 定義BufferedReader輸入流來讀取URL的響應
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("傳送 POST 請求出現異常!"+e);
            e.printStackTrace();
        }
        //使用finally塊來關閉輸出流、輸入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }    
呼叫示例:
  public static void main(String[] args) {  
    	Map<String,String> parameters=new HashMap<String,String>();
    	parameters.put("startDate", "2017-07-01");  
    	parameters.put("endDate", "2017-07-05"); 
    	parameters.put("org", "");  
    	parameters.put("creater", "");     	
        String result =HttpUtils.sendGet("http://10.10.66.246:8080/OA2ERP/U9/LoanBillListSvl", parameters);
        JSONObject json = JSONObject.fromObject(result); // 首先把字串轉成 JSONArray  物件      
        JSONArray jsonArray =json.getJSONArray("list");    
        System.out.println(jsonArray.size()); 
    }