首頁 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工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

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)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
使用VSCode編寫JavaScript代碼的最佳實踐 使用VSCode編寫JavaScript代碼的最佳實踐 May 15, 2025 pm 09:45 PM

在VSCode中編寫JavaScript代碼的最佳實踐包括:1)安裝Prettier、ESLint和JavaScript(ES6)codesnippets擴展,2)配置launch.json文件進行調試,3)使用現代JavaScript特性和優化循環來提高性能。通過這些設置和技巧,你可以在VSCode中更高效地開發JavaScript代碼。

Laravel   Vue.js 開發單頁面應用(SPA)教程 Laravel Vue.js 開發單頁面應用(SPA)教程 May 15, 2025 pm 09:54 PM

使用Laravel和Vue.js可以構建單頁面應用(SPA)。 1)在Laravel中定義API路由和控制器,處理數據邏輯。 2)在Vue.js中創建組件化前端,實現用戶界面和數據交互。 3)配置CORS和使用axios進行數據交互。 4)利用VueRouter實現路由管理,提升用戶體驗。

PS如何製作3D立體文字效果? PS如何製作3D立體文字效果? May 15, 2025 pm 11:39 PM

在Photoshop中製作3D立體文字效果主要通過三種方法:1)使用3D工具,2)圖層樣式,3)手動繪製。首先,使用3D工具時,創建新文檔並輸入文字,選中文字層後選擇“新建3D突出效果從選區”,然後調整旋轉、縮放和位置。其次,通過圖層樣式中的“斜面和浮雕”選項,調整“深度”、“大小”和“軟化”參數來模擬3D效果。最後,手動繪製方法需要更多技巧和時間,但可以完全控制效果。

怎樣用PS合成兩張圖片無縫銜接? 怎樣用PS合成兩張圖片無縫銜接? May 15, 2025 pm 11:57 PM

在Photoshop中合成兩張圖片並實現無縫銜接的步驟包括:1.調整亮度和對比度,使兩張圖片的色調一致;2.使用蒙版和混合模式擦除邊緣,實現自然過渡。這種方法需要反複調整和試錯,關注細節處理和顏色一致性,才能達到最佳效果。

Linux下停止MongoDB服務的安全操作流程 Linux下停止MongoDB服務的安全操作流程 May 15, 2025 pm 10:57 PM

在Linux系統下,安全停止MongoDB服務的步驟如下:1.使用命令“mongod--shutdown”優雅關閉服務,確保數據一致性。 2.如果服務無響應,使用“kill-2”嘗試安全關閉。 3.停止服務前檢查日誌,避免中斷重大操作。 4.使用“sudo”提升權限執行命令。 5.停止後手動刪除鎖文件“sudorm/var/lib/mongodb/mongod.lock”確保下次啟動無障礙。

山寨幣挖礦還值得參與嗎?收益如何計算? 山寨幣挖礦還值得參與嗎?收益如何計算? May 16, 2025 am 09:09 AM

山寨幣挖礦仍值得參與,但需謹慎評估。收益計算需考慮幣價、算力難度、電費和設備成本。 1. 仍可挖的山寨幣包括ETC、RVN、ERG和KAS。 2. 挖礦是否賺錢取決於幣價、算力難度、電費和設備成本,低電費地區仍有利潤。

清理MongoDB數據庫中無用數據的策略 清理MongoDB數據庫中無用數據的策略 May 15, 2025 pm 10:36 PM

清理MongoDB數據庫中的無用數據是為了提升性能和節省存儲空間。具體方法包括:1.使用deleteMany刪除過期數據;2.創建TTL索引自動清理;3.利用聚合管道刪除舊版本數據;4.定期檢查和優化索引以提升查詢性能。

怎樣用PS調整照片的曝光不足? 怎樣用PS調整照片的曝光不足? May 15, 2025 pm 11:54 PM

在Photoshop中調整曝光不足的照片可以使用“曝光度”、“亮度/對比度”和“曲線”調整工具:1.“曝光度”調整用於初步提升整體曝光度;2.“亮度/對比度”調整可同時提昇亮度和對比度;3.“曲線”調整允許精確控制不同亮度範圍,適合細化調整。

See all articles