http請求工具類--Java
阿新 • • 發佈:2019-01-07
專案中需要通過傳送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()); }