Java 发送Http的post请求,后端用@RequestBody接收参数的

    技术2024-06-17  80

    工具类utils:

    package co.yixiang.utils; import com.alibaba.fastjson.JSONObject; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * @author xyp * @data 2020/7/3 */ public class HttpUtil { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数 * @param authorization * 请求参数(允许为空) * @param cookie * 请求参数(允许为空) * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, Map<String, String> param, String authorization, String cookie) { String result = ""; BufferedReader in = null; try { StringBuffer query = new StringBuffer(); for (Map.Entry<String, String> kv : param.entrySet()) { query.append(URLEncoder.encode(kv.getKey(), "UTF-8") + "="); query.append(URLEncoder.encode(kv.getValue(), "UTF-8") + "&"); } if (query.lastIndexOf("&") > 0) { query.deleteCharAt(query.length() - 1); } String urlNameString = url + "?" + query.toString(); URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); if (authorization != null){ connection.setRequestProperty("Authorization", authorization); } if (cookie != null){ connection.setRequestProperty("Cookie", cookie); } // 建立实际的连接 connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数 * @param authorization * 请求参数(允许为空) * @param cookie * 请求参数(允许为空) * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, Map<String, String> param, String authorization, String cookie) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { String para = ""; for (String key : param.keySet()) { para += (key + "=" + param.get(key) + "&"); } if (para.lastIndexOf("&") > 0) { para = new String(para.substring(0, para.length() - 1)); } String urlNameString = url + "?" + para; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); if (authorization != null){ conn.setRequestProperty("Authorization", authorization); } if (cookie != null){ conn.setRequestProperty("Cookie", cookie); } // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } /** * 发送post请求 * @param url * 发送请求的 URL * @param param * 请求参数 * @param authorization * 请求参数(允许为空) * @param cookie * 请求参数(允许为空) * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param, String authorization, String cookie) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url + "?" + param); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); if (authorization != null){ conn.setRequestProperty("Authorization", authorization); } if (cookie != null){ conn.setRequestProperty("Cookie", cookie); } // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } public static void main(String[] args) { //请求参数 String body = "{\"status\":[1],\"customerid\":[\"20000047\"],\"sdorderno\":[1580459238218],\"total_fee\":[\"100.00\"],\"paytime\":[1580459238218],\"sign\":[\"a0397aef701f13e79133566582afa903\"]}"; //请求头,可变,根据实际来 String authorization = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0IiwiYXV0aCI6ImliRXF1aXBtZW50TGlzdDplZGl0LGliQmFua0NhcmRMaXN0Omxpc3QsaWJCYW5rRmxvdzpsaXN0LGliRGlzYnVyc2VtZW50UmVjb3JkOmxpc3QsaWJCYW5rQ2FyZExpc3Q6YWRkLGliQmFua0NhcmRMaXN0OmVkaXQsaWJEaXNidXJzZW1lbnQ6YWRkLGliUGF5bWVudE9yZGVyOmRlbCxpYkJhbmtBbGFybTpkZWwsaWJFcXVpcG1lbnRBbGFybTplZGl0LHRlc3QsaWJCYW5rQWxhcm06ZWRpdCxpYkRpc2J1cnNlbWVudDpsaXN0LGliRXF1aXBtZW50QWxhcm06ZGVsLGliUGF5bWVudE9yZGVyOmxpc3QsaWJQYXltZW50T3JkZXI6YWRkLGliRXF1aXBtZW50TGlzdDpkZWwsaWJCYW5rQWxhcm06bGlzdCxpYkJhbmtDYXJkTGlzdDpkZWwsaWJFcXVpcG1lbnRMaXN0OmFkZCxpYk1lcmNoYW50SW5mb3JtYXRpb246bGlzdCxpYkVxdWlwbWVudEFsYXJtOmxpc3QsaWJFcXVpcG1lbnRMaXN0Omxpc3QsaWJEaXNidXJzZW1lbnQ6ZGVsLGliRGlzYnVyc2VtZW50OmVkaXQsaWJQYXltZW50T3JkZXI6ZWRpdCIsImV4cCI6MTU5Mzc4MzUwMn0.p_AEZfwErkRQCJ9ctZBNgf9fniLPGogV9rxSGyZEqStOOv7YEdAcefsAJNnUxzOOhLCdwhGBBAEDDVn3x43A3A"; //cookie值,可变,根据实际来 String cookie = "YSHOP-TOEKN=Bearer%20eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0IiwiYXV0aCI6ImliRXF1aXBtZW50TGlzdDplZGl0LGliQmFua0NhcmRMaXN0Omxpc3QsaWJCYW5rRmxvdzpsaXN0LGliRGlzYnVyc2VtZW50UmVjb3JkOmxpc3QsaWJCYW5rQ2FyZExpc3Q6YWRkLGliQmFua0NhcmRMaXN0OmVkaXQsaWJEaXNidXJzZW1lbnQ6YWRkLGliUGF5bWVudE9yZGVyOmRlbCxpYkJhbmtBbGFybTpkZWwsaWJFcXVpcG1lbnRBbGFybTplZGl0LHRlc3QsaWJCYW5rQWxhcm06ZWRpdCxpYkRpc2J1cnNlbWVudDpsaXN0LGliRXF1aXBtZW50QWxhcm06ZGVsLGliUGF5bWVudE9yZGVyOmxpc3QsaWJQYXltZW50T3JkZXI6YWRkLGliRXF1aXBtZW50TGlzdDpkZWwsaWJCYW5rQWxhcm06bGlzdCxpYkJhbmtDYXJkTGlzdDpkZWwsaWJFcXVpcG1lbnRMaXN0OmFkZCxpYk1lcmNoYW50SW5mb3JtYXRpb246bGlzdCxpYkVxdWlwbWVudEFsYXJtOmxpc3QsaWJFcXVpcG1lbnRMaXN0Omxpc3QsaWJEaXNidXJzZW1lbnQ6ZGVsLGliRGlzYnVyc2VtZW50OmVkaXQsaWJQYXltZW50T3JkZXI6ZWRpdCIsImV4cCI6MTU5Mzc4MzUwMn0.p_AEZfwErkRQCJ9ctZBNgf9fniLPGogV9rxSGyZEqStOOv7YEdAcefsAJNnUxzOOhLCdwhGBBAEDDVn3x43A3A"; String jsionResult=HttpUtil.sendPost("http://192.168.18.1:8013/api/callback",body,authorization,cookie); System.out.println(jsionResult); } }

    后台接受请求的Controller类里请求对应的方法:

    /** * 测试方法 * / @PostMapping(value = "/callback") @Log("订单回调到下游") @ApiOperation("订单回调到下游") public ResponseEntity<Object> callback(@RequestBody Map<String,Object> callbackPama){ return new ResponseEntity<>(ibBankOrderApiService.callback(callbackPama), HttpStatus.OK); }

    这种方式类似于用Java的方式模拟postman软件里的post请求:

    Processed: 0.016, SQL: 10