Java實(shí)現(xiàn)post請(qǐng)求詳細(xì)代碼(帶有參數(shù))
代碼示例:
package Sort.pay; import net.sf.json.JSONObject; import org.apache.commons.codec.digest.DigestUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.*; public class Pay { public static void main(String[] args) { String url = "http://xxxxxx";//訪問路徑 Random random = new Random(); Map<String, Object> map = new HashMap<>(); map.put("authCode", "1423009170000001"); map.put("resource", "api.hl.order.pay.unified"); map.put("requestTime", "20230129105758"); map.put("versionNo", "1"); Map<String, Object> params = new HashMap<>(); params.put("businessOrderNo", random.nextInt(1000000000));//202105623000002 params.put("payAmount", "90.00"); params.put("remark", "購買山核桃20斤"); params.put("merchantNo", "771389"); params.put("operatorAccount", "19884151060"); params.put("deviceNo", "402102317000001"); params.put("notifyUrl", "http://testapi.liankok.com/notify/pay"); params.put("payExpireTime", "600"); params.put("limitPay", "1"); params.put("payUrlExpireTime", "60"); params.put("subject", "山核桃"); params.put("goodsTag", "guolicheng"); params.put("goodsInfo", "{\"receiptid\":\"323323\",\"costprice\":200.00,\"goodsdetail\":[{\"goodsid\":\"123123123\",\"goodsname\":\"小石頭\",\"thirdgoodsid\":\"23323453\",\"quantity\":1,\"price\":5.00}]}"); map.putAll(params); // map.put("params",params); //排序集合 map = PaySortUtil.sortByKey(map); //遍歷輸出拼接字符串 Set<String> keys = map.keySet(); String str = ""; for (String key : keys) { str += key + "=" + map.get(key) + "&"; } str = str.toLowerCase() + "U7iIPg2x1k"; //md5加密字符串 String md5sr = DigestUtils.md5Hex(str); map.put("sign", md5sr); Map<String, Object> map3 = new HashMap<>();//存放結(jié)果 //將需要比較刪除的兩個(gè)集合添加 map3.putAll(map); map3.putAll(params); //for - each遍歷比較且刪除 for (String a : map.keySet()) { if (params.containsKey(a) || params.containsValue(map.get(a))) { map3.remove(a); } } map3.put("versionNo", "1"); map3.put("params", params); System.out.println(map3); JSONObject jsonObject=JSONObject.fromObject(map3); System.out.println(jsonObject.toString()); String ss= Pay.sendPost(url,jsonObject.toString()); System.out.println(ss); } public static String sendPost(String url,String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打開和URL之間的連接 URLConnection conn = realUrl.openConnection(); // 設(shè)置通用的請(qǐng)求屬性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行 conn.setDoOutput(true); conn.setDoInput(true); // 獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流 out = new PrintWriter(conn.getOutputStream()); // 發(fā)送請(qǐng)求參數(shù) out.print(param); // flush輸出流的緩沖 out.flush(); // 定義BufferedReader輸入流來讀取URL的響應(yīng) in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.err.println("發(fā)送POST請(qǐng)求出現(xiàn)異常!" + e); e.printStackTrace(); } //使用finally塊來關(guān)閉輸出流、輸入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } } class PaySortUtil { public static Map<String, Object> sortByKey(Map<String, Object> map){ //創(chuàng)建一個(gè)帶有比較器的TreeMap Map<String, Object> treeMap = new TreeMap<>(String::compareTo); //將你的map傳入treeMap treeMap.putAll(map); return treeMap; } }
pom文件所需依賴,有些依賴不是必需的,這里沒有刪除
<dependencies> <!-- post請(qǐng)求的依賴--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.2</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>16.0.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.78</version> </dependency> <!--MD5依賴--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>maven-surefire-common</artifactId> <version>2.12.4</version> </dependency> <dependency> <groupId>org.kie.modules</groupId> <artifactId>org-apache-commons-httpclient</artifactId> <version>6.2.0.CR2</version> <type>pom</type> </dependency> <!-- JSONObject對(duì)象依賴的jar包 --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>net.sf.ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.3</version> <classifier>jdk15</classifier><!-- 指定jdk版本 --> </dependency> <!-- Json依賴架包下載 --> </dependencies> <properties> <maven.compiler.source>7</maven.compiler.source> <maven.compiler.target>7</maven.compiler.target> </properties>
附:java使用post請(qǐng)求帶參(放在body中)訪問外部連接
java使用post請(qǐng)求帶參(放在body中)訪問外部連接
package com.bxzn.bxgd.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.bxzn.bxgd.util.yuntai.HTTPClientUtil; import com.bxzn.bxgd.util.yuntai.HttpsClientUtil; import netscape.javascript.JSObject; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.text.SimpleDateFormat; import java.util.*; JSONObject jsonObject = new JSONObject(); jsonObject.put("create_time", checkLog.getCreateTime()); jsonObject.put("camera_loc", checkLog.getCameraLoc()); jsonObject.put("state", checkLog.getState()); jsonObject.put("type", checkLog.getType()); jsonObject.put("attach_file", checkLog.getAttachFile()); jsonObject.put("level", checkLog.getLevel()); HTTPClientUtil.sendPost(urls, null, JSON.toJSONString(jsonObject));
HTTPClientUtil類
package com.bxzn.bxgd.util.yuntai; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.bxzn.bxgd.util.socket.WebSocket; import com.bxzn.bxgd.util.socket.WssSocket; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.DeleteMethod; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.PutMethod; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.http.HttpEntity; 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.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; import javax.sound.sampled.*; import javax.sql.rowset.serial.SerialBlob; import java.io.*; import java.net.URI; import java.net.URISyntaxException; import java.nio.ByteBuffer; import java.sql.Blob; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Stream; /** * 和云臺(tái)進(jìn)行http的連接 * * @author xxy */ public class HTTPClientUtil { /** * 編碼格式。發(fā)送編碼格式統(tǒng)一用UTF-8 */ private static final String ENCODING = "UTF-8"; /** * 設(shè)置連接超時(shí)時(shí)間,單位毫秒。 */ private static final Integer CONNECT_TIMEOUT = 6000; /** * 請(qǐng)求獲取數(shù)據(jù)的超時(shí)時(shí)間(即響應(yīng)時(shí)間),單位毫秒。 */ private static final Integer SOCKET_TIMEOUT = 6000; /** * @param url 請(qǐng)求地址 * @param data 只支持JSON對(duì)象(com.alibaba.fastjson.JSONObject) * @return String * @Title:POST請(qǐng)求 * @Decription:發(fā)送POST請(qǐng)求,data參數(shù)只支持JSON對(duì)象(com.alibaba.fastjson.JSONObject) */ public static String sendPost(String url, Map<String, String> header, JSONObject data) throws IOException { // 設(shè)置默認(rèn)請(qǐng)求頭 Map<String, String> headers = new HashMap<>(); if (header != null) { headers = header; } else { headers.put("Content-Type", "application/json;charset=utf-8"); } return doPostByJSON(url, headers, data, ENCODING); } /** * @param url 請(qǐng)求地址 * @param data 只支持JSON對(duì)象(com.alibaba.fastjson.JSONObject) * @return String * @Title:POST請(qǐng)求 * @Decription:發(fā)送POST請(qǐng)求,data參數(shù)只支持JSON對(duì)象(com.alibaba.fastjson.JSONObject) */ public static String sendPost(String url, Map<String, String> header, String data) throws IOException { // 設(shè)置默認(rèn)請(qǐng)求頭 Map<String, String> headers = new HashMap<>(); if (header != null) { headers = header; } else { headers.put("Content-Type", "application/json;charset=utf-8"); } return doPostByJSON(url, headers, JSONObject.parseObject(data), ENCODING); } /** * @param url 請(qǐng)求地址 * @param headers Map集合的請(qǐng)求頭參數(shù) * @param params Map集合(輸入?yún)?shù)為JSON對(duì)象) * @return String * @Title POST請(qǐng)求(默認(rèn)編碼:UTF-8) */ public static String sendPost(String url, Map<String, String> headers, Map<String, String> params) throws IOException { // 將map轉(zhuǎn)成json JSONObject data = JSONObject.parseObject(JSON.toJSONString(params)); return doPostByJSON(url, headers, data, ENCODING); } /** * @param url 請(qǐng)求地址 * @param headers 請(qǐng)求頭 * @param data 請(qǐng)求實(shí)體 * @param encoding 字符集 * @return String * @throws IOException * @Title: sendPost * @Description: TODO(發(fā)送post請(qǐng)求) */ private static String doPostByJSON(String url, Map<String, String> headers, JSONObject data, String encoding) throws IOException { // 請(qǐng)求返回結(jié)果 String resultJson = null; // 創(chuàng)建Client CloseableHttpClient client = HttpClients.createDefault(); // 發(fā)送請(qǐng)求,返回響應(yīng)對(duì)象 CloseableHttpResponse response = null; // 創(chuàng)建HttpPost對(duì)象 HttpPost httpPost = new HttpPost(); /** * setConnectTimeout:設(shè)置連接超時(shí)時(shí)間,單位毫秒。 * setConnectionRequestTimeout:設(shè)置從connect Manager(連接池)獲取Connection * 超時(shí)時(shí)間,單位毫秒。這個(gè)屬性是新加的屬性,因?yàn)槟壳鞍姹臼强梢怨蚕磉B接池的。 * setSocketTimeout:請(qǐng)求獲取數(shù)據(jù)的超時(shí)時(shí)間(即響應(yīng)時(shí)間),單位毫秒。 * 如果訪問一個(gè)接口,多少時(shí)間內(nèi)無法返回?cái)?shù)據(jù),就直接放棄此次調(diào)用。 */ RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build(); httpPost.setConfig(requestConfig); try { // 設(shè)置請(qǐng)求地址 httpPost.setURI(new URI(url)); // 設(shè)置請(qǐng)求頭 packageHeader(headers, httpPost); // 設(shè)置實(shí)體 httpPost.setEntity(new StringEntity(JSON.toJSONString(data), encoding)); // httpPost.addHeader("Content-Type", "application/json;charset=utf-8"); // 發(fā)送請(qǐng)求,返回響應(yīng)對(duì)象 response = client.execute(httpPost); // 獲取響應(yīng)狀態(tài) int status = response.getStatusLine().getStatusCode(); if (status != HttpStatus.SC_OK) { System.out.println("響應(yīng)失敗,狀態(tài)碼:" + status); } // 獲取響應(yīng)結(jié)果 resultJson = EntityUtils.toString(response.getEntity(), encoding); } catch (Exception e) { e.printStackTrace(); } finally { release(response, client); } return resultJson; } /** * Description: 封裝請(qǐng)求頭 * * @param params * @param httpMethod */ public static void packageHeader(Map<String, String> params, HttpRequestBase httpMethod) { // 封裝請(qǐng)求頭 if (params != null) { Set<Map.Entry<String, String>> entrySet = params.entrySet(); for (Map.Entry<String, String> entry : entrySet) { // 設(shè)置到請(qǐng)求頭到HttpRequestBase對(duì)象中 httpMethod.setHeader(entry.getKey(), entry.getValue()); } } } /** * Description: 釋放資源 * * @param httpResponse * @param httpClient * @throws IOException */ public static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException { // 釋放資源 if (httpResponse != null) { httpResponse.close(); } if (httpClient != null) { httpClient.close(); } } }
然后自己寫個(gè)測試類就行,順便一提,HTTPClientUtil.sendPost(urls, null, JSON.toJSONString(jsonObject));這個(gè)方法返回值取決于服務(wù)器的返回值,是字符串類型
總結(jié)
到此這篇關(guān)于Java實(shí)現(xiàn)post請(qǐng)求的文章就介紹到這了,更多相關(guān)Java實(shí)現(xiàn)post請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Gson中@JsonAdater注解的幾種方式總結(jié)
這篇文章主要介紹了Gson中@JsonAdater注解的幾種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Lombok @Slf4j log對(duì)象沒有info等方法不可用問題及解決
本文主要介紹了如何解決Spring Boot項(xiàng)目中的日志依賴沖突問題,以及如何使用Lombok和SLF4J進(jìn)行日志記錄,Lombok通過生成Logger對(duì)象簡化了日志記錄,而SLF4J提供了一個(gè)統(tǒng)一的日志接口,允許開發(fā)者在運(yùn)行時(shí)選擇不同的日志實(shí)現(xiàn)2024-12-12SpringBoot?JavaMailSender發(fā)送郵件功能(實(shí)例詳解)
JavaMailSender是Spring提供的,非常好用的,實(shí)現(xiàn)郵件發(fā)送的接口 ,這篇文章主要介紹了SpringBoot?JavaMailSender發(fā)送郵件功能,需要的朋友可以參考下2024-03-03Java實(shí)現(xiàn)深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)算法
深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)是兩種基本的圖搜索算法,可用于圖的遍歷、路徑搜索等問題。DFS采用棧結(jié)構(gòu)實(shí)現(xiàn),從起點(diǎn)開始往深處遍歷,直到找到目標(biāo)節(jié)點(diǎn)或遍歷完整個(gè)圖;BFS采用隊(duì)列結(jié)構(gòu)實(shí)現(xiàn),從起點(diǎn)開始往廣處遍歷,直到找到目標(biāo)節(jié)點(diǎn)或遍歷完整個(gè)圖2023-04-04淺談springmvc 通過異常增強(qiáng)返回給客戶端統(tǒng)一格式
這篇文章主要介紹了淺談springmvc 通過異常增強(qiáng)返回給客戶端統(tǒng)一格式。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09Java實(shí)現(xiàn)上傳和下載功能(支持多個(gè)文件同時(shí)上傳)
這篇文章主要介紹了Java實(shí)現(xiàn)上傳和下載功能,支持多個(gè)文件同時(shí)上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12