http 请求工具类(表单提交、Ajax提交,get/post方法,是否携带请求头)

该博客基于JDK1.8版本编写和测试,运用JDK1.7新语法自动回收资源,依赖HttpClient 4.5.3。支持get和post两种请求方法,表单和Ajax两种提交方式,表单提交的Content-Type为application/x-www-form-urlencoded,Ajax提交为application/json,还支持是否携带请求头,并给出了具体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简单说明

  1. 基于jdk1.8版本编写、测试;
  2. 使用jdk1.7新语法try-with-resource,自动回收资源;
  3. 依赖jar包及版本
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpcore</artifactId>
    	<version>4.5.3</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpcomponents-client</artifactId>
    	<version>4.5.3</version>
    </dependency>
    
    使用HttpClient 4.5.3

二、支持情况:

  1. 支持 两种请求方法(get/post)
  2. 支持 两种提交方式(表单提交、Ajax提交)
    两种提交的区别:
    表单提交 Content-Type:application/x-www-form-urlencoded
    Ajax提交 Content-Type:application/json
  3. 支持 是否携带请求头

三、具体代码:

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * http 请求工具类
 *
 * 支持 两种请求方法(get/post)
 * 支持 两种提交方式(表单提交、Ajax提交)
 * 支持 是否携带请求头
 *
 * 表单提交 编码方式为 application/x-www-form-urlencoded
 * Ajax提交 编码方式为 application/json
 *
 * @author 杨彭伟
 * @date 2018-12-06 18:15
 */
public class HttpUtil {

    /**
     * 带参数GET请求
     *
     * @param url   请求地址
     * @param param 请求参数
     * @return java.lang.String
     * @author 杨彭伟
     * @date 2018-9-21 9:03
     */
    public static String doGet(String url, Map<String, String> param) {
        String resultString = "";
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet httpGet = buildHttpGet(url, param);
            try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
                if (response.getStatusLine().getStatusCode() == 200) {
                    resultString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }

    /**
     * 带参数和请求头的GET请求
     *
     * @param url    请求地址
     * @param param  请求参数
     * @param header 请求头
     * @return java.lang.String
     * @date 2018-9-25 20:09
     */
    public static String doGet(String url, Map<String, String> param, Map<String, String> header) {
        String resultString = "";
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet httpGet = buildHttpGet(url, param);
            if (header != null) {
                for (String key : header.keySet()) {
                    httpGet.setHeader(key, header.get(key));
                }
            }
            try (CloseableHttpResponse response = httpClient.execute(httpGet)){
                if (response.getStatusLine().getStatusCode() == 200) {
                    resultString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }

    /**
     * 无参GET请求
     *
     * @param url 请求地址
     * @return java.lang.String
     */
    public static String doGet(String url) {
        return doGet(url, null);
    }

    /**
     * 无参的 POST 表单提交
     *
     * @param url 请求地址
     * @return java.lang.String
     */
    public static String doPost(String url) {
        return doPost(url, null);
    }

    /**
     * 有参数、无请求头 POST 表单提交
     *
     * @param url   请求地址
     * @param param 请求参数
     * @return java.lang.String
     */
    public static String doPost(String url, Map<String, String> param) {
        String resultString = "";
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost(url);
            setEntity(httpPost, param);
            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                resultString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }

    /**
     * 有参数、有请求头 POST 表单提交
     *
     * @param url    请求地址
     * @param param  请求参数
     * @param header 请求头
     * @return java.lang.String
     */
    public static String doPost(String url, Map<String, String> param, Map<String, String> header) {
        String resultString = "";
        try (CloseableHttpClient httpClient = HttpClients.createDefault()){
            HttpPost httpPost = new HttpPost(url);
            if (header != null) {
                for (String key : header.keySet()) {
                    httpPost.setHeader(key, header.get(key));
                }
            }
            setEntity(httpPost, param);
            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                resultString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }

    /**
     * 有参数、无请求头 POST Ajax提交
     *
     * @param url  请求地址
     * @param json 请求参数
     * @return java.lang.String
     */
    public static String doPostJson(String url, String json) {
        String resultString = "";
        try (CloseableHttpClient httpClient = HttpClients.createDefault()){
            HttpPost httpPost = new HttpPost(url);
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                resultString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }

    /**
     * 有参数、有请求头 POST Ajax提交
     *
     * @param url    请求地址
     * @param json   请求参数
     * @param header 请求头
     * @return java.lang.String
     */
    public static String doPostJson(String url, String json, Map<String, String> header) {
        String resultString = "";
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost(url);
            if (header != null) {
                for (String key : header.keySet()) {
                    httpPost.setHeader(key, header.get(key));
                }
            }
            ContentType contentType = ContentType.create(ContentType.APPLICATION_JSON.getMimeType(), StandardCharsets.UTF_8);
            StringEntity entity = new StringEntity(json, contentType);
            httpPost.setEntity(entity);
            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                resultString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultString;
    }

    /**
     * 构建带有参数的 GET请求对象
     *
     * @param url   请求地址
     * @param param 请求参数
     * @return GET请求对象
     * @throws URISyntaxException
     */
    private static HttpGet buildHttpGet(String url, Map<String, String> param) throws URISyntaxException {
        URIBuilder builder = new URIBuilder(url);
        if (param != null) {
            for (String key : param.keySet()) {
                builder.addParameter(key, param.get(key));
            }
        }
        URI uri = builder.build();
        return new HttpGet(uri);
    }

    /**
     * 为post请求 设置请求参数
     *
     * @param httpPost POST请求对象
     * @param param    请求参数
     * @throws UnsupportedEncodingException
     */
    private static void setEntity(HttpPost httpPost, Map<String, String> param) throws UnsupportedEncodingException {
        if (param != null) {
            List<NameValuePair> paramList = new ArrayList<>();
            for (String key : param.keySet()) {
                paramList.add(new BasicNameValuePair(key, param.get(key)));
            }
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, StandardCharsets.UTF_8);
            httpPost.setEntity(entity);
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值