首頁 Java java教程 HttpUtils請求工具類別的程式碼

HttpUtils請求工具類別的程式碼

May 28, 2018 pm 04:13 PM
http 工具

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import com.pingan.qhcs.map.audit.constant.CodeConstant;
import com.pingan.qhcs.map.audit.exception.MapException;
public class HttpClientUtil {
protected static Log logger = LogFactory.getLog(HttpClientUtil.class);    
private static PoolingHttpClientConnectionManager cm;
private static String EMPTY_STR = "";
private static String UTF_8 = "UTF-8";
private static void init() {
if (cm == null) {
            cm = new PoolingHttpClientConnectionManager();
            cm.setMaxTotal(50);// 整个连接池最大连接数cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2        }
    }/** * 通过连接池获取HttpClient
     * 
     * @return */public static CloseableHttpClient getHttpClient() {
        init();return HttpClients.custom().setConnectionManager(cm).build();
    }public static String httpGetRequest(String url) {
        HttpGet httpGet = new HttpGet(url);return getResult(httpGet);
    }public static String httpGetRequest(String url, Map<String, Object> params) throws URISyntaxException {
        URIBuilder ub = new URIBuilder();
        ub.setPath(url);

        ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
        ub.setParameters(pairs);

        HttpGet httpGet = new HttpGet(ub.build());        return getResult(httpGet);
    }public static String httpGetRequest(String url, Map<String, Object> headers, Map<String, Object> params)throws URISyntaxException {
        URIBuilder ub = new URIBuilder();
        ub.setPath(url);

        ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
        ub.setParameters(pairs);

        HttpGet httpGet = new HttpGet(ub.build());for (Map.Entry<String, Object> param : headers.entrySet()) {
            httpGet.addHeader(param.getKey(), String.valueOf(param.getValue()));
        }return getResult(httpGet);
    }
    public static String httpPostRequest(String url) {
        HttpPost httpPost = new HttpPost(url);return getResult(httpPost);
    }
    public static String httpPostRequest(String url, Map<String, Object> params) throws UnsupportedEncodingException {
        HttpPost httpPost = new HttpPost(url);
        ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
        httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));return getResult(httpPost);
    }
    public static String httpPostRequest(String url, Map<String, Object> headers, Map<String, Object> params)throws UnsupportedEncodingException {
        HttpPost httpPost = new HttpPost(url);
        for (Map.Entry<String, Object> param : headers.entrySet()) {
            httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
        }

        ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
        httpPost.setEntity(new UrlEncodedFormEntity(pairs, UTF_8));return getResult(httpPost);
    }
    public static String httpPostRequest(String url, Map<String, Object> headers, String strBody)throws Exception {
        HttpPost httpPost = new HttpPost(url);for (Map.Entry<String, Object> param : headers.entrySet()) {
            httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
        }
        httpPost.setEntity(new StringEntity(strBody, UTF_8));return getResult(httpPost);
    }    
    private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, Object> params) {
        ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>();
        for (Map.Entry<String, Object> param : params.entrySet()) {
            pairs.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
        }return pairs;
    }/** * 处理Http请求
     * 
     *  setConnectTimeout:设置连接超时时间,单位毫秒。
     *  setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
     *  setSocketTimeout:请求获取数据的超时时间,单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
     *  
     * @param request
     * @return */private static String getResult(HttpRequestBase request) {
        
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(60000)
                .setConnectionRequestTimeout(5000).setSocketTimeout(60000).build();
        request.setConfig(requestConfig);// 设置请求和传输超时时间
        // CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpClient httpClient = getHttpClient();
        try {
            CloseableHttpResponse response = httpClient.execute(request); //执行请求
            // response.getStatusLine().getStatusCode();
            HttpEntity entity = response.getEntity();
            if (entity != null) {
            // long len = entity.getContentLength();// -1 表示长度未知
            String result = EntityUtils.toString(entity);
                response.close();
                // httpClient.close();
                return result;
            }
        } catch (ClientProtocolException e) {
            logger.error("[maperror] HttpClientUtil ClientProtocolException : " + e.getMessage());
            throw new MapException(CodeConstant.CODE_CONNECT_FAIL, "HttpClientUtil ClientProtocolException :" + e.getMessage());
        } catch (IOException e) {
            logger.error("[maperror] HttpClientUtil IOException : " + e.getMessage());
            throw new MapException(CodeConstant.CODE_CONNECT_FAIL, "HttpClientUtil IOException :" + e.getMessage());
        } 
        finally {

        }
        return EMPTY_STR;
    }

}

###

以上是HttpUtils請求工具類別的程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

比特幣(BTC)138億美元期權到期在即,多頭面臨關鍵考驗 比特幣(BTC)138億美元期權到期在即,多頭面臨關鍵考驗 Aug 29, 2025 pm 04:15 PM

目錄關鍵要點:多頭比特幣策略在114,000美元下方防禦薄弱美聯儲動向與科技股表現或主導比特幣未來走向‍比特幣期權到期日臨近,疊加科技板塊承壓,或將揭示當前回調是牛市暫停還是趨勢反轉的開端。關鍵要點:比特幣空方在114,000美元以下佔據優勢,隨著期權到期日逼近,下行壓力可能進一步增強。市場對人工智能(AI)領域資本支出的憂慮升溫,加劇整體金融市場的波動,削弱風險資產吸引力。價值138億美元的比特幣(BTC)期權將於8月29日集中到期,目前市場正密切關注這一節點,以判斷此前9.7%的跌幅究竟是短

什麼是DuckChain (DUCK)? DUCK價格預測2025-2030年 什麼是DuckChain (DUCK)? DUCK價格預測2025-2030年 Aug 29, 2025 pm 04:24 PM

目錄什麼是DuckChain(DUCK)? DuckChain的目標和願景DUCK代幣經濟學DUCK代幣釋放計劃$DUCK代幣的用途代幣用途DUCK的當前市場狀況影響Duckchain(DUCK)價格的因素Duckchain(DUCK)2025-2030年價格預測1.2025年價格預測2.2030年價格預測Duckchain(DUCK)2025-2030年價格預測表結論‍DuckChain(DUCK)是區塊

幣圈未平倉合約是什麼?為何在加密期貨交易中重要 ?一文詳解 幣圈未平倉合約是什麼?為何在加密期貨交易中重要 ?一文詳解 Aug 29, 2025 pm 04:09 PM

目錄加密貨幣期貨交易中的未平倉量(OI)是什麼?未平倉量在期貨交易中如何運作未平倉合約與期貨交易量為什麼未平倉合約在加密貨幣期貨交易中很重要如何將未平倉合約與其他技術指標結合1. 相對強弱指數(RSI)與未平倉合約2. 移動平均線與未平倉量3. 支撐與阻力位4.成交量與未平倉量5. 結合資金費率與未平倉量加密貨幣期貨交易中未平倉量的局限性結論未平倉量(OI)常見問題1. 加密貨幣期貨中的

Strategy、Metaplanet比特幣(BTC)收購量突破3100枚,總持倉超726億美元! Strategy、Metaplanet比特幣(BTC)收購量突破3100枚,總持倉超726億美元! Aug 29, 2025 pm 04:00 PM

在比特幣市場持續震蕩的背景下,機構投資者的佈局卻愈發堅定。 8月底,全球兩大知名“比特幣財庫”企業——Strategy與Metaplanet再度聯手出擊,合計斥資約3.67億美元購入3,184枚BTC,進一步推高其總持倉至651,448枚,按市價計算價值已達726億美元。這一系列動作不僅彰顯了企業對比特幣的長期信心,也加劇了鏈上可用供應的稀缺性,持續影響市場流動性格局。一、Strategy八月再加碼:投入3.569億美元,強化比特幣儲備戰略作為全球持有比特幣最多的企業,Strategy(前身為Mi

Bonk 幣價格預測:未來如何? BONK 能漲到 1 美元嗎? Bonk 幣價格預測:未來如何? BONK 能漲到 1 美元嗎? Aug 29, 2025 pm 04:03 PM

目錄什麼是Bonk幣? BONK的價格取決於什麼?為什麼今天Bonk幣(BONK)上漲了?本週Bonk幣價格預測Bonk幣2025年價格預測BonkCoin2026年價格預測BonkCoin2030年價格預測Bonk幣2040年價格預測Bonk幣2050年價格預測常見問題Bonk幣能達到0.5美分嗎? Bonk幣能達到1美分嗎? BonkCoin能達到10美分嗎? BonkCoin

win10專業版多少錢 win10專業版2025年價格介紹 win10專業版多少錢 win10專業版2025年價格介紹 Sep 01, 2025 pm 06:21 PM

如果你正在考慮購買Windows 10專業版,那麼了解其價格是非常重要的。 Windows 10專業版不僅為用戶提供了豐富的功能和強大的安全性,還能夠滿足企業和個人用戶的多種需求。那麼,Win10專業版2025年的價格是多少呢?本文將為你詳細介紹Windows 10專業版的價格信息,幫助你做出明智的購買決策。

鴻蒙5系統如何下載安裝歐藝App ? 鴻蒙5系統如何下載安裝歐藝App ? Aug 29, 2025 pm 04:06 PM

目錄一、下載並安裝卓易通App二、獲取歐易App安裝包三、使用卓易通完成安裝四、安裝失敗如何解決? 1、華為手機(安卓系統)2、華為手機(鴻蒙系統)3、小米手機4、OPPO手機5、電信用戶網絡問題6、通用解決方案在鴻蒙系統上安裝歐易App,需先安裝【卓易通】App,然後前往官網下載歐易的安裝包,最後通過卓易通打開並安裝該APK文件即可正常使用。一、下載並安裝卓易通App進入手機自帶的應用市場,搜索“卓易通”,找到後點擊下載並完成安裝。二、獲取歐易App安裝包請確保從官方途徑獲取應用,建議複製以

Mango Network(MGO幣)是什麼? MGO未來發展及價格預測 Mango Network(MGO幣)是什麼? MGO未來發展及價格預測 Sep 02, 2025 pm 08:57 PM

目錄什麼是MangoNetwork(MGO代幣)?技術優勢(一)卓越性能(二)安全可靠MangoNetwork主要特點1.多虛擬機並行執行架構2.高級跨鏈通信3.高性能共識機制4.通過Move語言增強安全性5.模塊化區塊鏈設計MangoNetwork如何運作MGO代幣經濟學代幣分配明細:解鎖和發佈時間表:MangoNetwork路線圖和未來發展MangoNetwork價格預測MangoNetwork20

See all articles