【Java】使用 HttpURLConnection 发送 POST 和 GET 请求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dh_Chao/article/details/78805345

实现代码

/**
 * http 请求工具类
 * Created by zhh on 2017/12/08.
 */
public class HttpHelper {

    // 每次读取大小
    private final static int READ_BODY_SIZE = 5120;

    /**
     * post 方式请求内容
     * @param strUrl url地址
     * @param paramMap 参数集
     * @return
     */
    public static String post(String strUrl, Map<String, Object> paramMap) {
        StringBuffer sb = new StringBuffer();
        for (String strKey : paramMap.keySet()) {
            sb.append("&");
            sb.append(strKey);
            sb.append("=");
            sb.append(paramMap.get(strKey));
        }
        sb.replace(0, 1, "?");
        if (sb.length() > 0) {
            return post(strUrl + sb.toString(), "");
        }
        return post(strUrl + sb.toString(), "");
    }

    /**
     * get 方式请求内容
     * @param strUrl url地址
     * @param paramMap 参数集
     * @return
     */
    public static String get(String strUrl, Map<String, Object> paramMap) {
        StringBuffer sb = new StringBuffer();
        for (String strKey : paramMap.keySet()) {
            sb.append("&");
            sb.append(strKey);
            sb.append("=");
            sb.append(paramMap.get(strKey));
        }
        sb.replace(0, 1, "?");
        if (sb.length() > 0) {
            return get(strUrl + sb.toString());
        }
        return get(strUrl + sb.toString());
    }

    /**
     * post 方式请求内容
     * @param strUrl url地址
     * @param content 输出内容
     * @return
     */
    public static String post(String strUrl, String content) {
        return post(strUrl, content, 180);
    }

    /**
     * get 方式请求内容
     * @param strUrl url地址
     * @return
     */
    public static String get(String strUrl) {
        return get(strUrl, 180);
    }

    /**
     * post 方式请求内容
     * @param strUrl url地址
     * @param content 输出内容
     * @param timeoutSecond 设置延时时间
     * @return
     */
    public static String post(String strUrl, String content, int timeoutSecond) {
        try {
            URL url = new URL(strUrl);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            // 连接主机超时 毫秒
            con.setConnectTimeout(timeoutSecond * 1000);
            // 从主机读取数据超时毫秒
            con.setReadTimeout(timeoutSecond * 1000);
            // 设置从HttpURLConnection读入
            con.setDoInput(true);
            // 设置是否向httpUrlConnection输出, 因为这个是post请求, 参数要放在http正文内, 因此需要设为true, 默认情况下是false
            con.setDoOutput(true);
            // 设置该URLConnection的allowUserInteraction请求头字段的值
            con.setAllowUserInteraction(false);
            con.setUseCaches(true);
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
            // 此处getOutputStream会隐含的进行connect,所以在开发中不调用上述的connect()也可以
            BufferedWriter bout = new BufferedWriter(new OutputStreamWriter(con.getOutputStream()));
            bout.write(content);
            bout.flush();
            bout.close();
            return streamReadHtml(con.getInputStream());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * get 方式请求内容
     * @param strUrl url地址 
     * @param timeoutSecond 设置延时时间 
     * @return
     */
    public static String get(String strUrl, int timeoutSecond) {
        try {
            URL url = new URL(strUrl);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            // 连接主机超时 毫秒
            con.setConnectTimeout(timeoutSecond * 1000);
            // 从主机读取数据超时毫秒
            con.setReadTimeout(timeoutSecond * 1000);
            con.setRequestMethod("GET");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
            con.connect();
            return streamReadHtml(con.getInputStream());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 读取内容
     * @param istream
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String streamReadHtml(InputStream istream) throws UnsupportedEncodingException {
        String html = "";
        byte[] responseBody = new byte[READ_BODY_SIZE];
        int npos = 0;
        int nread = 0;
        try {
            while ((nread = istream.read(responseBody, npos, responseBody.length - npos)) >= 0) {
                npos += nread;
                byte[] tmpBuf = new byte[npos + READ_BODY_SIZE];
                System.arraycopy(responseBody, 0, tmpBuf, 0, npos);
                responseBody = tmpBuf;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (istream != null) {
                    istream.close();
                }
                istream = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        html = new String(responseBody, 0, npos, "UTF-8");
        return html;
    }

}

代码用例

public static void main(String[] args) {
    String reqUrl = "https://www.baidu.com";
    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("wd", "测试test");
    System.out.println(HttpHelper.post(reqUrl, paramMap));
}

猜你喜欢

转载自blog.csdn.net/Dh_Chao/article/details/78805345