zoukankan      html  css  js  c++  java
  • http协议发送header+body+json及接收解析

    http发送header+body+json和返回

    探究http协议发送header,发送body,发送json

    探究htt协议接收header,接收body,解析json

    (1)使用jar包

    		<dependency>
    		    <groupId>org.apache.httpcomponents</groupId>
    		    <artifactId>httpcore</artifactId>
    		    <version>4.4.9</version>
    		</dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.5</version>
            </dependency>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20180130</version>
            </dependency>
            <dependency>
                <groupId>com.jayway.jsonpath</groupId>
                <artifactId>json-path</artifactId>
            </dependency>
    

    (2)发送端

    package com.his.vh.test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.http.Header;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONObject;
    import org.junit.Test;
    
    /**
     *@file_name:TestHis.java
     *@description:
     *
     *@time:2018年5月21日 上午9:31:43
     *@author:sf
     */
    public class TestRegister {
    	
    	@Test
    	public void register() throws Exception{	
    		
    		//封装发送参数
    		 Map<String, String> paras = new HashMap<String, String>();
    		//——————————————————————————————————————————————————————
    		 paras.put("url", "http://127.0.0.1:8083/front/register");
    		 paras.put("username", "username_xiaoming");
    		 paras.put("password", "password_xiaoming");
    		 
    		 String msg_package = "{"package": {"
    			        +""head": {"
    			        +""busseID": "C210","
    			        +""sendTradeNum": "20190701083030-10011001-0001","
    			        +""senderCode": "0000","
    			        +""senderName": "医院","
    			        +""receiverCode": "0000","
    			        +""receiverName": "保险","
    			        +""intermediaryCode": "0000","
    			        +""intermediaryName": "ms","
    			        +""hosorgNum": "001","
    			        +""hosorgName": "张三","
    			        +""systemType": "1","
    			        +""busenissType": "2","
    			        +""standardVersionCode": "version:1.0.0","
    			        +""clientmacAddress ": "30BB7E0A5E2D ","
    			        +""recordCount ": "1"},"
    			        +""body": ["
    			        +" {"
    			        +""medicalNum": "001","
    			        +""listCat": "张三","
    			        +""medicalItemCat": "1","
    			        +""recipeNum": "2""
    			        +"}"
    			        +"],"
    			        +""additionInfo": {"
    			        +""errorCode": "123","
    			        +""errorMsg": "","
    			        +""receiverTradeNum": "","
    			        +""correlationId": "","
    			        +""asyncAsk": "0","
    			        +""callback": " http://127.0.0.1:8080/xxxx/xxxx.do","
    			        +""curDllAddr": ""}}}";
    		 
    		 paras.put("package", msg_package);
    		 
    		//——————————————————————————————————————————————————————
    	     	//创建客户端
    		    HttpClient client = HttpClients.createDefault();
    	        //建立连接
    	        HttpPost post = new HttpPost(paras.get("url"));
    	        //设置Content-type
    	        post.addHeader("Content-type", "application/json; charset=utf-8");
    	        
    	        //从map中取出参数,放入header中
                post.addHeader("header_1", paras.get("username"));
                post.addHeader("header_2", paras.get("password"));
                post.addHeader("header_3", paras.get("package"));
    	
                //设置body的接收类型
    	        post.setHeader("Accept", "application/json");        
    	        
    	  	  
    	        JSONObject json = new JSONObject();
    
    	        //body中封装数据
    
                json.put("body_1", paras.get("username"));
                json.put("body_2", paras.get("password"));
                json.put("body_3", paras.get("package"));
    
    	        post.setEntity(new StringEntity(json.toString(),"UTF-8"));
    	        
    	        //发送post请求
    	        HttpResponse httpResponse = client.execute(post);
    	        
    	        //HttpEntity用于接收【response.getWriter().print(内容)】中print的内容;
    	        HttpEntity entity = httpResponse.getEntity();
    	        
    	        //接收httpResponse的结果
    	        Map<String, String> resultMap = new HashMap<String, String>();
    	        //取出状态码
    	        resultMap.put("status", httpResponse.getStatusLine().toString());
    	        //取出print的值
    	        resultMap.put("responseContent", EntityUtils.toString(entity));
    //	        resultMap.put("responseContent", EntityUtils.toString(entity,"UTF-8"));//解决乱码
    	       
    	        //获取所有返回的header
    	        System.out.println("
    ==================== print return headers ==================== ");
    	        Header[] headers = httpResponse.getAllHeaders();
    	        for (Header header : headers) {
    				System.out.println(header);
    			}
    	     	        
    	        //response 中获取 TOKEN
    	        if (httpResponse.containsHeader("TOKEN")) {
    	            resultMap.put("TOKEN", httpResponse.getFirstHeader("token").toString());
    	        }
    	        
    	        //打印返回值的map	
    	        System.out.println("
    ==================== print return map ==================== ");
        	   for(String key:resultMap.keySet()){
                   System.out.println("==========> "+ key +" : "+ resultMap.get(key));
               }
    
    	}
    
    }
    
    
    

    (3)接收端

    package com.hisfront.vh.controller;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.configuration.Configuration;
    import org.json.JSONObject;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.hisfront.vh.utils.AssistUtils;
    import com.hisfront.vh.utils.DcsHttpUtils;
    import com.hisfront.vh.utils.PropertiesUtils;
    import com.jayway.jsonpath.JsonPath;
    
    @Controller
    @RequestMapping(value = "/front")
    public class FrontController {
    
        @RequestMapping(value="/register")
        public void register(HttpServletRequest request, HttpServletResponse response) throws Exception{
        	
        	System.out.println("
    ==================== print request header ==================== ");
        	//打印header 可封装成方法
        	 Enumeration headerNames = request.getHeaderNames();
             while (headerNames.hasMoreElements()) {
                 String key = (String) headerNames.nextElement();
                 String value = request.getHeader(key);
                 System.out.println("===> " + key + " --- " + value);
             }
        	
             //获取body
             try {
            	 
            	// 获取bodyContent,可封装成方法----start
    			request.setCharacterEncoding("UTF-8");
    	
    	         StringBuffer sb = new StringBuffer();
    	         BufferedReader read = request.getReader();
    	         String str;
    	         while ((str = read.readLine()) != null) {
    	             sb.append(str + "
    ");
    	         }
    	         read.close();
    	         String bodyContent =sb.toString();
    	         System.out.println("
    ==================== print request body ==================== ");
    	         System.out.println(bodyContent);
    	      // 获取bodyContent,可封装成方法----end
    	      
    	    System.out.println("
    ==================== print request body ==================== ");
             //从bodyContent中获取json串的参数
             JSONObject jo = new JSONObject(bodyContent);
             System.out.println("body_1 ============> "+ jo.get("body_1"));
             System.out.println("body_2 ============> "+ jo.get("body_2"));
             System.out.println("body_3 ============> "+ jo.get("body_3"));
        		
             
             //使用JsonPath,获取json的value         
             System.out.println("
    ==================== print request body package==================== ");
             String responseContent = (String) jo.get("body_3");
       
             System.out.println("sendTradeNum =======> " + JsonPath.read(responseContent, "$.package.head.sendTradeNum"));
             System.out.println("medicalNum =======> " + JsonPath.read(responseContent, "$.package.body[0].medicalNum"));
             System.out.println("errorCode =======> " +JsonPath.read(responseContent, "$.package.additionInfo.errorCode"));
         	
             } catch (Exception e) {
    			e.printStackTrace();
    		}
    
             //获取header中的值
        	String username = request.getHeader("header_1");
        	String password = request.getHeader("header_2");
        	
        	
        	//加密产生token
        	//String token = Base64Encrypt.Encode(username+password);//使用相应的加密方法生成token
        	String token = username+"_"+password;//这里直接用 username_password 作为token
        	
        	//把token放入session
        	request.getSession().setAttribute("token", token);
        	
        	//设置response的header
        	response.setHeader("token", "return_token --> "+token);
        	response.setHeader("header_1", "return_token --> header_1 ");
        	response.setHeader("header_2", "return_token --> header_2");
        	
            response.setCharacterEncoding("UTF-8");
            try {
            	//把token写到 StringEntity 中,返回给请求对象
    			response.getWriter().print(token);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
        	
        	
        }
    
    
    }
    
    

    (4)发送端console

    ==================== print return headers ==================== 
    Set-Cookie: JSESSIONID=22340FC21A26A7E2B062AB718309E716; Path=/; HttpOnly
    token: return_token --> username_xiaoming_password_xiaoming
    header_1: return_token --> header_1 
    header_2: return_token --> header_2
    Content-Length: 35
    Date: Mon, 21 May 2018 09:45:17 GMT
    
    ==================== print return map ==================== 
    ==========> TOKEN : token: return_token --> username_xiaoming_password_xiaoming
    ==========> responseContent : username_xiaoming_password_xiaoming
    ==========> status : HTTP/1.1 200 
    

    (5)接收端console

    ==================== print request header ==================== 
    ===> content-type --- application/json; charset=utf-8
    ===> header_1 --- username_xiaoming
    ===> header_2 --- password_xiaoming
    ===> header_3 --- {"package": {"head": {"busseID": "C210","sendTradeNum": "20190701083030-10011001-0001","senderCode": "0000","senderName": ";b","receiverCode": "0000","receiverName": "Ýi","intermediaryCode": "0000","intermediaryName": "ms","hosorgNum": "001","hosorgName": " 	","systemType": "1","busenissType": "2","standardVersionCode": "version:1.0.0","clientmacAddress ": "30BB7E0A5E2D ","recordCount ": "1"},"body": [ {"medicalNum": "001","listCat": " 	","medicalItemCat": "1","recipeNum": "2"}],"additionInfo": {"errorCode": "123","errorMsg": "","receiverTradeNum": "","correlationId": "","asyncAsk": "0","callback": " http://127.0.0.1:8080/xxxx/xxxx.do","curDllAddr": ""}}}
    ===> accept --- application/json
    ===> content-length --- 866
    ===> host --- 127.0.0.1:8083
    ===> connection --- Keep-Alive
    ===> user-agent --- Apache-HttpClient/4.5.5 (Java/1.8.0_131)
    ===> accept-encoding --- gzip,deflate
    
    ==================== print request body ==================== 
    {"body_3":"{"package": {"head": {"busseID": "C210","sendTradeNum": "20190701083030-10011001-0001","senderCode": "0000","senderName": "医院","receiverCode": "0000","receiverName": "保险","intermediaryCode": "0000","intermediaryName": "ms","hosorgNum": "001","hosorgName": "张三","systemType": "1","busenissType": "2","standardVersionCode": "version:1.0.0","clientmacAddress ": "30BB7E0A5E2D ","recordCount ": "1"},"body": [ {"medicalNum": "001","listCat": "张三","medicalItemCat": "1","recipeNum": "2"}],"additionInfo": {"errorCode": "123","errorMsg": "","receiverTradeNum": "","correlationId": "","asyncAsk": "0","callback": " http://127.0.0.1:8080/xxxx/xxxx.do","curDllAddr": ""}}}","body_1":"username_xiaoming","body_2":"password_xiaoming"}
    
    
    ==================== print request body ==================== 
    body_1 ============> username_xiaoming
    body_2 ============> password_xiaoming
    body_3 ============> {"package": {"head": {"busseID": "C210","sendTradeNum": "20190701083030-10011001-0001","senderCode": "0000","senderName": "医院","receiverCode": "0000","receiverName": "保险","intermediaryCode": "0000","intermediaryName": "ms","hosorgNum": "001","hosorgName": "张三","systemType": "1","busenissType": "2","standardVersionCode": "version:1.0.0","clientmacAddress ": "30BB7E0A5E2D ","recordCount ": "1"},"body": [ {"medicalNum": "001","listCat": "张三","medicalItemCat": "1","recipeNum": "2"}],"additionInfo": {"errorCode": "123","errorMsg": "","receiverTradeNum": "","correlationId": "","asyncAsk": "0","callback": " http://127.0.0.1:8080/xxxx/xxxx.do","curDllAddr": ""}}}
    
    ==================== print request body package==================== 
    sendTradeNum =======> 20190701083030-10011001-0001
    medicalNum =======> 001
    errorCode =======> 123
    
  • 相关阅读:
    20.C语言_数组参数传递
    19.C语言_取值运算符*
    Google Chrome 解决 “您的连接不是私密连接” 和被毒霸劫持
    教你如何一步步将项目部署到Github
    教你如何把Android手机的网络完全映射到PC上,比如免流给PC用…
    CSS background-size 属性详解
    display:block;是什么意思
    Cookie是储存在电脑文本文件中的数据,用于保存访问者的信息,并可以在下次打开页面时引用。
    Marquee(跑马灯)横向、纵向、无空白的不间断连续循环滚动代码
    Visual Studio中从应用程序中调试SQL脚本
  • 原文地址:https://www.cnblogs.com/vmkash/p/9068528.html
Copyright © 2011-2022 走看看