Java 用HTTP的方式发送JSON报文请求

前言: 

  项目调用第三方接口时,通常是用socket或者http的通讯方式发送请求:http 为短连接,客户端发送请求都需要服务器端回送响应,请求结束后,主动释放链接。Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。下面介绍HTTP的方式发送和接收JSON报文。

需求:

  用HTTP的方式,向URL为10.10.10.110:8888地址发送json报文,返回的结果也是json报文。

主要代码如下:

复制代码
 1             String resp= null;
 2             JSONObject obj = new JSONObject();
 3             obj.put("name", "张三");   
 4             obj.put("age", "18");   
 5             String query = obj.toString();
 6             log.info("发送到URL的报文为:");
 7             log.info(query);
 8             try {
 9                 URL url = new URL("http://10.10.10.110:8888"); //url地址
10 
11                 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
12                 connection.setDoInput(true);
13                 connection.setDoOutput(true);
14                 connection.setRequestMethod("POST");
15                 connection.setUseCaches(false);
16                 connection.setInstanceFollowRedirects(true);
17                 connection.setRequestProperty("Content-Type","application/json");
18                 connection.connect();
19 
20                 try (OutputStream os = connection.getOutputStream()) {
21                     os.write(query.getBytes("UTF-8"));
22                 }
23 
24                 try (BufferedReader reader = new BufferedReader(
25                         new InputStreamReader(connection.getInputStream()))) {
26                     String lines;
27                     StringBuffer sbf = new StringBuffer();
28                     while ((lines = reader.readLine()) != null) {
29                         lines = new String(lines.getBytes(), "utf-8");
30                         sbf.append(lines);
31                     }
32                     log.info("返回来的报文:"+sbf.toString());
33                     resp = sbf.toString();    
34                    
35                 }
36                 connection.disconnect();
37 
38             } catch (Exception e) {
39                 e.printStackTrace();
40             }finally{
41                 JSONObject json = (JSONObject)JSON.parse(resp);
42             }
复制代码

网上还有一种拼json发送报文的方式,也把代码分享出来:

复制代码
 1 String resp = null;
 2 String name = request.getParameter("userName");
 3 String age = request.getParameter("userAge");
 4 String query = "{\"name\":\""+name+"\",\"age\":\""+age+"\"}";
 5 
 6 try {
 7                 URL url = new URL("http://10.10.10.110:8888"); //url地址
 8 
 9                 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
10                 connection.setDoInput(true);
11                 connection.setDoOutput(true);
12                 connection.setRequestMethod("POST");
13                 connection.setUseCaches(false);
14                 connection.setInstanceFollowRedirects(true);
15                 connection.setRequestProperty("Content-Type","application/json");
16                 connection.connect();
17 
18                 try (OutputStream os = connection.getOutputStream()) {
19                     os.write(query.getBytes("UTF-8"));
20                 }
21 
22                 try (BufferedReader reader = new BufferedReader(
23                         new InputStreamReader(connection.getInputStream()))) {
24                     String lines;
25                     StringBuffer sbf = new StringBuffer();
26                     while ((lines = reader.readLine()) != null) {
27                         lines = new String(lines.getBytes(), "utf-8");
28                         sbf.append(lines);
29                     }
30                     log.info("返回来的报文:"+sbf.toString());
31                     resp = sbf.toString();    
32                    
33                 }
34                 connection.disconnect();
35 
36             } catch (Exception e) {
37                 e.printStackTrace();
38             }finally{
39                 JSONObject json = (JSONObject)JSON.parse(resp);
40             }
复制代码

两种方式其实都是一样的。写得不对的地方,往各位撸过的大拿指正~

posted @ 2019-02-19 14:59  程序员宝典  阅读(726)  评论(0编辑  收藏  举报