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
原文地址:https://www.cnblogs.com/vmkash/p/9068528.html