http工具類

public class HttpRequstUtil {/*** http請求方法** @param message        查詢條件* @param url            查詢地址* @param token          身份驗證token* @param socketTimeout  socket 響應時間* @param connectTimeout 超時時間* @return 返回字符串*/@Deprecatedpublic static String queryResultToString(JSON message, String url, String token, int socketTimeout, int connectTimeout) throws Exception {/*System.out.println("->開始http請求");System.out.println("請求參數>>>" + message.toString());System.out.println("請求鏈接>>>" + url);System.out.println("請求token>>>" + token);System.out.println("超時配置socketTimeout-connectTimeout>>>" + socketTimeout + "-" + connectTimeout);*/String result = "";// 轉碼 將發送的數據轉為字符串實體StringEntity outEntity = new StringEntity(message.toString(), "UTF-8");outEntity.setContentType("application/json");//System.out.println("請求數據轉碼>>>" + outEntity.toString());// 配置請求項RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();//System.out.println("請求配置項>>>" + requestConfig.toString());// 配置請求頭HttpPost httpPost = new HttpPost(url);httpPost.addHeader("Content-Type", "application/json");httpPost.addHeader("Accept", "application/json");httpPost.addHeader("X-Aa-Token", token);httpPost.setEntity(outEntity);httpPost.setConfig(requestConfig);//System.out.println("http請求信息>>>" + httpPost.toString());try {result = (String) executeRequest(httpPost, true);} catch (Exception e) {throw new Exception(e.toString());}return result;}/*** @param httpRequest* @return java.lang.String* @description 執行Http請求* @date 2022/5/6 20:51*/public static Object executeRequest(HttpUriRequest httpRequest, boolean isStr) throws IOException, DebtException, Exception {Object result = null;// 執行一個http請求,傳遞HttpGet或HttpPost參數CloseableHttpClient httpclient = null;if ("https".equals(httpRequest.getURI().getScheme())) {httpclient = createSSLInsecureClient();} else {httpclient = HttpClients.createDefault();}try {CloseableHttpResponse response = httpclient.execute(httpRequest);//判斷接口是否調用成功int statusCode = response.getStatusLine().getStatusCode();if (HttpStatus.SC_OK != statusCode) {System.out.println("接口調用失敗");throw new ApiException("接口調用失敗,HttpStatus="+statusCode);} else {//System.out.println("發起請求->連接成功");HttpEntity entity = response.getEntity();// 是-獲取字符串 否-獲取字節數組if (isStr) {result = EntityUtils.toString(entity, "UTF-8");} else {result = EntityUtils.toByteArray(entity);}// 關閉資源EntityUtils.consume(entity);}} catch (Exception e) {throw new Exception(e.toString());} finally {try {httpclient.close();} catch (IOException e) {throw new IOException(e.toString());}}return result;}/*** 創建 SSL連接*/private static CloseableHttpClient createSSLInsecureClient() throws Exception {try {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(new TrustStrategy() {@Overridepublic boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {return true;}}).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier() {@Overridepublic boolean verify(String hostname, SSLSession session) {return true;}});return HttpClients.custom().setSSLSocketFactory(sslsf).build();} catch (GeneralSecurityException ex) {throw new RuntimeException(ex);}}/*** @description 通過POST方式發送JSON數據* @author wangws* @date 2022/9/7 12:54* @param url     請求路徑* @param message 待發送JSON信息* @param isStr   是否返回字符串(否,返回字節數組)* @param header  請求頭Header(設置Token等)* @param timeOut 超時時間設置(socketTimeout,connectTimeout)* @return java.lang.Object*/public static Object sendJsonByPost(String url, JSON message, boolean isStr, Map<String, String> header, Map<String, Integer> timeOut) throws Exception {Object result = null;// 1.創建http請求對象Object httpRequestObj = createHttpRequest("POST");if (!StringTool.isNull(httpRequestObj)) {HttpPost httpPost = (HttpPost) httpRequestObj;// 2.添加URLhttpPost.setURI(URI.create(url));// 無需設置Header的Content-Type// 3.設置其他請求頭信息if (!StringTool.isNull(header)) {Iterator<Map.Entry<String, String>> iterator = header.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> next = iterator.next();httpPost.addHeader(next.getKey(), next.getValue());}}// 添加JSON信息// 將發送的數據轉為字符串實體StringEntity entity = new StringEntity(message.toString(), "UTF-8");entity.setContentType("application/json;charset=UTF-8");// 4.設置消息體httpPost.setEntity(entity);RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeOut.get("socketTimeout")).setConnectTimeout(timeOut.get("connectTimeout")).build();// 5.設置請求配置項httpPost.setConfig(requestConfig);// 6.執行Http請求對象,返回結果result = executeRequest(httpPost, isStr);} else {throw new ApiException("Http Request Method is not be matched");}return result;}/*** @param path    請求路徑* @param message Get請求參數* @param isStr   是否返回字符串(否,返回字節數組)* @param header  請求頭Header(設置Token等)* @param timeOut 超時時間設置(socketTimeout,connectTimeout)* @return java.lang.Object* @description 通過GET方式請求數據* @author wangws* @date 2022/10/18 12:54*/public static Object sendDataByGet(String path, Map<String, String> message, boolean isStr, Map<String, String> header, Map<String, Integer> timeOut) throws Exception {Object result = null;// 1.創建http請求對象Object httpRequestObj = createHttpRequest("GET");if (!StringTool.isNull(httpRequestObj)) {HttpGet httpGet = (HttpGet) httpRequestObj;StringBuilder urlBuilder = new StringBuilder();// 設置接口地址urlBuilder.append(path);URIBuilder uri = new URIBuilder();// 設置網絡協議//uri.setScheme("https");// 設置主機地址//uri.setHost("www.baidu.com");// 設置方法//uri.setPath("/getdata");//添加參數// 2.拼接GET請求參數if (!StringTool.isNull(message) && !message.isEmpty()) {Iterator<Map.Entry<String, String>> it = message.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, String> next = it.next();uri.setParameter(next.getKey(), next.getValue());}}urlBuilder.append(uri.build().toString());// 3.添加URLhttpGet.setURI(new URI(urlBuilder.toString()));// 4.設置其他請求頭信息if (!StringTool.isNull(header)) {Iterator<Map.Entry<String, String>> iterator = header.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> next = iterator.next();httpGet.addHeader(next.getKey(), next.getValue());}}RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeOut.get("socketTimeout")).setConnectTimeout(timeOut.get("connectTimeout")).build();// 5.設置請求配置項httpGet.setConfig(requestConfig);// 6.執行Http請求對象,返回結果result = executeRequest(httpGet, isStr);} else {throw new Exception("Http Request Method is not be matched");}return result;}/*** @description 通過POST方式上傳文件* @author wangws* @date 2022/9/7 12:55* @param url     請求路徑* @param file    待上傳文件* @param isStr   是否返回字符串(否,返回字節數組)* @param header  請求頭Header* @param param   待發送參數信息* @param timeOut 超時時間設置(socketTimeout,connectTimeout)* @return java.lang.Object*/public static Object uploadFileByPost(String url, File file, boolean isStr, Map<String, String> header, Map<String, String> param, Map<String, Integer> timeOut) throws Exception {Object result = "";// 1.創建http請求對象Object httpRequestObj = createHttpRequest("POST");if (!StringTool.isNull(httpRequestObj)) {HttpPost httpPost = (HttpPost) httpRequestObj;// 2.添加URLhttpPost.setURI(URI.create(url));// 3.追加文件(類似form表單),支持多個// RFC6532 避免文件名為中文時亂碼MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);// 參數名upload(可修改) 注意和后臺接收時保持一致builder.addBinaryBody("upload", file, ContentType.MULTIPART_FORM_DATA, file.getName());builder.setCharset(Charset.forName("UTF-8"));// 無需設置Header的Content-Type,否則會出錯// 4.設置其他請求頭信息if (!StringTool.isNull(header)) {Iterator<Map.Entry<String, String>> iterator = header.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> next = iterator.next();httpPost.addHeader(next.getKey(), next.getValue());}}// 5.builder添加其他參數信息if (!StringTool.isNull(param)) {Iterator<Map.Entry<String, String>> it = param.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, String> next = it.next();builder.addTextBody(next.getKey(), next.getValue());}}HttpEntity entity = builder.build();// 6.設置消息體httpPost.setEntity(entity);// 7.設置配置項RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeOut.get("socketTimeout")).setConnectTimeout(timeOut.get("connectTimeout")).build();httpPost.setConfig(requestConfig);// 8.執行Http請求對象,返回JSON類型字符串result = executeRequest(httpPost, isStr);} else {throw new ApiException("Http Request Method is not be matched");}// 返回結果return result;}/*** @description 創建HttpRequest請求對象* @author wangws* @date 2022/9/7 12:55* @param requestMethod* @return java.lang.Object*/public static Object createHttpRequest(String requestMethod) {// 大寫轉換requestMethod = requestMethod.toUpperCase();// 設置HTTP的請求方式if ("POST".equals(requestMethod)) {return new HttpPost();} else if ("GET".equals(requestMethod)) {return new HttpGet();} else if ("HEAD".equals(requestMethod)) {return new HttpHead();} else if ("PUT".equals(requestMethod)) {return new HttpPut();} else if ("PATCH".equals(requestMethod)) {return new HttpPatch();} else if ("DELETE".equals(requestMethod)) {return new HttpDelete();} else if ("OPTIONS".equals(requestMethod)) {return new HttpOptions();} else if ("TRACE".equals(requestMethod)) {return new HttpTrace();}return null;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710806.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

金仕達與 DolphinDB 建立深度合作,共筑 FICC 科技創新新篇章

從“關起門做交易”到“打開門做服務”&#xff0c;國內 FICC 業務正經歷從自營到市場化服務的轉變&#xff0c;借助數據分析、算法交易等技術的快速發展&#xff0c;交易團隊能夠更加主動地發現市場需求&#xff0c;為不同客群提供更好的做市業務&#xff0c;FICC 交易電子化已…

打造智能汽車微服務系統平臺:架構的設計與實現

隨著智能汽車技術的飛速發展&#xff0c;微服務架構在汽車行業中的應用越來越廣泛。采用微服務架構可以使汽車系統更加靈活、可擴展&#xff0c;并且有利于快速推出新功能和服務。本文將從設計原則、關鍵技術、數據安全等方面&#xff0c;介紹如何搭建智能汽車微服務系統平臺架…

網絡通信技術

?1.分組交換技術 在網絡通信中&#xff0c;數據通過網絡節點的某種轉發方式&#xff0c;實現從一個端系統到另一個端系統之間的數據傳輸技術稱為數據交換技術。數據交換技術有電路交換、報文交換和分組交換&#xff0c;計算機網絡采用分組交換技術。 分組就是源主機(如服務器…

【Python】FastAPI 項目創建 與 Docker 部署

文章目錄 前言&需求描述1. 本地FastAPI1.1 Python 環境準備1.2 本地 Pycharm 創建FastAPI項目 2. Python FastAPI 部署2.1 服務器配置Python環境2.2.1 下載與配置Git、Pyenv等工具2.2.2 下載與配置Python 2.2 FastAPI 打包成鏡像2.2.1 項目準備所需環境文件2.2.2 編寫Docke…

畢業設計——基于springboot的聊天系統設計與實現(服務端 + 客戶端 + web端)

整個工程包含三個部分&#xff1a; 1、聊天服務器 聊天服務器的職責一句話解釋&#xff1a;負責接收所有用戶發送的消息&#xff0c;并將消息轉發給目標用戶。 聊天服務器沒有任何界面&#xff0c;但是卻是IM中最重要的角色&#xff0c;為表達敬意&#xff0c;必須要給它放個…

入侵和攻擊模擬 (BAS) 技術應用實踐

文章目錄 前言一、實施BAS的必要性二、實施BAS的關鍵步驟1、識別網絡中的脆弱區域2、創建基線安全模型3、選擇合適的BAS工具4、進行模擬攻擊測試5、分析結果并改進三、BAS實施中的挑戰1、組織的專業知識和能力有限2、改變傳統工作流程3、安全預算不足4、難以與現有安全基礎設施…

C語言中的不同變量初始值:深度解析與實踐指南

在C語言編程領域&#xff0c;理解和掌握變量的初始化原理和過程是構建穩健、高效代碼的基礎。C語言對不同類型變量的初始化處理方式存在差異&#xff0c;這要求開發者明確理解并合理應用這些規則以避免潛在的運行時錯誤和未定義行為。本文將詳細解讀C語言中各類變量的初始狀態設…

AI智能分析網關V4車輛違停算法在園區場景中的應用及特點

隨著城市化進程的加速&#xff0c;車輛違停問題愈發嚴重&#xff0c;給城市交通帶來了極大的困擾。為了解決這一問題&#xff0c;AI技術逐漸被應用于車輛違停的檢測中。AI檢測算法在車輛違停方面的應用&#xff0c;主要是通過計算機視覺技術&#xff0c;對道路上的車輛進行實時…

智慧灌區項目案例(甘肅省蘭州市某重點灌區)

?甘肅省蘭州市某重點灌區自上個世紀80年代建成后,灌溉面積達到30萬畝,對推動當地農業發展發揮了重要作用。但長期以來,該灌區的水利管理仍主要依靠人工統計記錄,缺乏實時監測和精細化管理。為實現灌區管理的現代化升級,甘肅水利局委托星創易聯公司設計實施水利信息化項目。 項…

【Python筆記-設計模式】狀態模式

一、說明 狀態模式是一種行為設計模式&#xff0c;用于解決對象在不同狀態下具有不同行為 (一) 解決問題 在對象行為根據對象狀態而改變時&#xff0c;規避使用大量的條件語句來判斷對象的狀態&#xff0c;提高系統可維護性 (二) 使用場景 當對象的行為取決于其狀態&#…

C#使用iText7將多個PDF文檔合并為單個文檔

使用HtmlAgilityPack抓取并分析網頁內容&#xff0c;然后再調用PuppeteerSharp將網頁生成PDF文件&#xff0c;最終的成果如下圖所示&#xff0c;得到將近120個pdf文檔。能看&#xff0c;但是不方便&#xff0c;需要逐個打開文檔才能看到所需的內容&#xff0c;最好能將這些文檔…

淺談 Linux 網絡編程 socket

文章目錄 socket 介紹 socket 介紹 socket 被翻譯成 網絡套接字&#xff0c;這個名字實在是不好理解&#xff0c;我更愿意稱為"插槽"。 忽略 socket 的中文名&#xff0c;先無腦記住兩個規則&#xff1a; ① 記住&#xff0c;一個文件描述符(fd) 指向一個 socket&…

GPT-SoVITS音色克隆-模型訓練步驟

GPT-SoVITS音色克隆-模型訓練步驟 GPT-SoVITS模型源碼一個簡單的TTS后端項目 基于模型部署和訓練教程&#xff0c;語雀 模型部署和訓練教程 啟動模型訓練的主頁面 1. 切到模型路徑 /psycheEpic/GPT-SoVITS進入Python虛擬環境&#xff0c;并掛起執行python腳本 conda activ…

機器學習(II)--樣本不平衡

現實中&#xff0c;樣本&#xff08;類別&#xff09;樣本不平衡&#xff08;class-imbalance&#xff09;是一種常見的現象&#xff0c;如&#xff1a;金融欺詐交易檢測&#xff0c;欺詐交易的訂單樣本通常是占總交易數量的極少部分&#xff0c;而且對于有些任務而言少數樣本更…

Linux信號【產生-保存-處理】

目錄 前言&#xff1a; 1、進程信號基本概念 1.1、什么是信號&#xff1f; 1.2、信號的作用 2、鍵盤鍵入 2.1、ctrlc 終止前臺進程 2.1.1、signal 注冊執行動作 3、系統調用 3.1、kill 函數 3.2、模擬實現 myKill 3.3、raise 函數 3.4、abort 函數 4、軟件條件信號…

人工智能福利站,初識人工智能,圖神經網絡學習,第五課

&#x1f3c6;作者簡介&#xff0c;普修羅雙戰士&#xff0c;一直追求不斷學習和成長&#xff0c;在技術的道路上持續探索和實踐。 &#x1f3c6;多年互聯網行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &#x1f389;歡迎 &#x1f44d;點贊?評論…

nginx設置緩存時間、日志分割、開啟多進程、網頁壓縮、配置防盜鏈

一、設置緩存時間 當網頁數據返回給客戶端后&#xff0c;可針對靜態網頁設置緩存時間&#xff0c;在配置文件內的http段內server段添加location&#xff0c;更改字段expires 1d來實現&#xff1a;避免重復請求&#xff0c;加快訪問速度 第一步&#xff1a;修改主配置文件 #修…

Vulnhub靶機:basic_pentesting_2

一、介紹 運行環境&#xff1a;Virtualbox 攻擊機&#xff1a;kali&#xff08;10.0.2.4&#xff09; 靶機&#xff1a;basic_pentesting_2&#xff08;10.0.2.7&#xff09; 目標&#xff1a;獲取靶機root權限和flag 靶機下載地址&#xff1a;https://download.vulnhub.c…

如何選擇O2OA(翱途)開發平臺的部署架構?

概述 O2OA(翱途)開發平臺[下稱O2OA開發平臺或者O2OA]支持公有云&#xff0c;私有云和混合云部署&#xff0c;也支持復雜的網絡結構下的分布式部署。本篇主要介紹O2OA(翱途)開發平臺支持的部署環境以及常用的集群部署架構。 軟硬件環境說明 支持的云化平臺&#xff1a; 華為云…

分布式概念:編碼一個簡單分布式系統

分布式系統是由多臺計算機組成的系統&#xff0c;它們通過網絡連接并共同完成任務。以下是一個簡單的分布式系統的編碼示例&#xff1a; 定義系統架構 首先&#xff0c;需要定義系統的架構。包括確定系統中的計算節點、通信機制和任務分配方式等。 編寫計算節點代碼 每個計算節…