HttpClient GET/POST

1、Maven項目依賴

<!-- httpclient -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.10</version>
</dependency>

2、下面有三個案列

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
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.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.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * @Description: httpclient幫助類
 * @Date : 2019/12/30 17:26
 */
public class HttpClientUtils {


    /**
     * @Description: httpclient Post
     * @Date : 2019/12/30 18:11
     */
    public static String httpClientPost(String url, Map<String, Object> map) {
        // 返回值
        String result = "";

        // 通過HttpPost來發送post請求
        HttpPost httpPost = new HttpPost(url);

        // 響應
        CloseableHttpResponse response;

        // 獲取默認的請求客戶端
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            // 第三步:構造list集合參數
            List<NameValuePair> list = new ArrayList<>();

            for (String m : map.keySet()) {
                BasicNameValuePair basicNameValuePair =
                        new BasicNameValuePair(m, map.get(m).toString());
                list.add(basicNameValuePair);
            }

            // 第二步:我們發現Entity是一個接口,所以只能找實現類,發現實現類又需要一個集合,集合的泛型是NameValuePair類型
            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(list);
            // 第一步:通過setEntity 將我們的entity對象傳遞過去
            httpPost.setEntity(formEntity);

            // 是一箇中間的橋樑,在httpClient裏面,是連接我們的請求與響應的一箇中間橋樑,所有的請求參數都是通過HttpEntity攜帶過去的
            // 通過client來執行請求,獲取一個響應結果
            response = client.execute(httpPost);
            HttpEntity entity = response.getEntity();
            result = EntityUtils.toString(entity, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * @Description: httpclient post 封裝
     * @RequestType: application/json
     * @Date : 2019/12/30 17:08
     */
    public static String httpClientPost(String url, String jsonParams) {
        // 返回值
        String result = "";

        // 定義請求方式
        HttpPost httpPost = new HttpPost(url);

        // 設置請求配置
        RequestConfig requestConfig = RequestConfig.custom().
                setConnectTimeout(180 * 1000).setConnectionRequestTimeout(180 * 1000)
                .setSocketTimeout(180 * 1000).setRedirectsEnabled(true).build();
        httpPost.setConfig(requestConfig);

        // 設置請求類型
        httpPost.setHeader("Content-Type", "application/json");

        // 創建httpclient客戶端
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {

            httpPost.setEntity(new StringEntity(jsonParams, ContentType.create("application/json", "utf-8")));
            HttpResponse response = httpClient.execute(httpPost);
            if (response != null && response.getStatusLine().getStatusCode() == 200) {
                result = EntityUtils.toString(response.getEntity());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * @Description: httpclient get封裝
     * @Date : 2019/12/30 17:12
     */
    public static String httpClientGet(String url, Map<String, Object> map) {
        // 參數
        String params = "";

        StringBuffer sb = new StringBuffer();
        // 準備拼接參數
        if (Objects.nonNull(map)) {
            params = url + "?";
            for (Object m : map.keySet()) {
                sb = sb.append("&").append(m).append(map.get(m));
            }
            params += sb.substring(1, sb.length());
        }

        // 接受返回值
        String result = "";

        // 創建http客戶端
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            // 採用get請求
            HttpGet httpGet = new HttpGet(params);
            // 通過client調用execute方法,得到我們的執行結果就是一個response,所有的數據都封裝在response裏面了
            CloseableHttpResponse Response = client.execute(httpGet);
            // HttpEntity
            // 是一箇中間的橋樑,在httpClient裏面,是連接我們的請求與響應的一箇中間橋樑,所有的請求參數都是通過HttpEntity攜帶過去的
            // 所有的響應的數據,也全部都是封裝在HttpEntity裏面
            HttpEntity entity = Response.getEntity();
            // 通過EntityUtils 來將我們的數據轉換成字符串
            result = EntityUtils.toString(entity, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}

 

發佈了72 篇原創文章 · 獲贊 40 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章