1. 程式人生 > >java 模擬http傳送json請求

java 模擬http傳送json請求

java中經常會用到模擬http請來發送各種訊息,比如說,有get請求,post請求,post請求的引數又包括一般引數和json引數,

http工具程式碼如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
/** 
 * @author  編碼小王子
 * @date    2018年5月25日 下午6:17:31 
 * @version 1.0   
 */
public class HttpUtils {
     // 傳送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請求
    public static String sendPost(String url, Map<String, String> parameters) {
        String result = "";// 返回的結果
        BufferedReader in = null;// 讀取響應輸入流
        PrintWriter out = 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);
            }
            // 建立URL物件
            java.net.URL connURL = new java.net.URL(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)");
            // 設定POST方式
            httpConn.setDoInput(true);
            httpConn.setDoOutput(true);
            // 獲取HttpURLConnection物件對應的輸出流
            out = new PrintWriter(httpConn.getOutputStream());
            // 傳送請求引數
            out.write(params);
            // flush輸出流的緩衝
            out.flush();
            // 定義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 (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}

二,如何呼叫

1,傳送GET請求

Map<String,String> params = new HashMap<String,String>();
params.put("user", "lgg");
String result = HttpUtils.sendGet("https://mp.csdn.net/postedit", params);
System.out.println("結果是:"+result);

2,傳送POST一般請求

Map<String,String> params = new HashMap<String,String>();
params.put("user", "lgg");
String result = HttpUtils.sendPost("https://mp.csdn.net/postedit", params);
System.out.println("結果是:"+result);

3,傳送POST的json請求

User user = new User();
user.setName("張三");
user.setAge(18);
Map<String,String> params = new HashMap<String,String>();
params.put("queryJson", JSON.toJSONString(user));
String result = HttpUtils.sendPost("https://mp.csdn.net/postedit", params);
System.out.println("結果是:"+result);