HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问

服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取客户端请求的所有信息。http请求包含请求行/状态行、请求头、请求体。

request如果是post才有请求体,get则没有请求体,直接跟在?后面,用&隔开。
getHeader(String name)获取单个请求头name对应的value
getHeaders(String name)获取多个请求头对应的一组value,因此返回的是枚举类型的数据
getHeaderNames()获取请求头的所有name值,返回的数据也是一个枚举类型数据,将枚举中的元素遍历出来,根据name取到value,即是请求头的所有信息。

请求头header一般用来存放一些cookie,token信息;

请求体body一般用来存储post的参数和参数数据;

我们用postman测试下

Params

school:XiaMen

Header

userName:chen

body

{"class":"test"}

java中get请求并且带header头_客户端

java中get请求并且带header头_请求头_02

package com.example.demo;

import java.io.BufferedReader;
 import java.text.MessageFormat;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;@RestController
 public class IndexController {    @RequestMapping("/hello")
     public String hello(HttpServletRequest request,HttpServletResponse response){
         
         /**
          * HttpServletRequest对象代表客户端的请求,当客户端通过http协议请求访问
          * 服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取
          * 客户端请求的所有信息.
          * http请求包含请求行/状态行、请求头、请求体
          */
         //客户端请求uri
         String uri = request.getRequestURI();
         //客户端请求行中的参数部分
         String queryString = request.getQueryString();
         //返回url的额外路径信息
         String pathInfo = request.getPathInfo();
         //客户端ip
         String ip = request.getRemoteAddr();
         //客户端完整主机名
         String host = request.getRemoteHost();
         //客户端端口
         int port = request.getRemotePort();
         //获取web服务器的主机和端口,主机名
         String webHost = request.getLocalAddr();
         int webPort = request.getLocalPort();
         String webName = request.getLocalName();
         //获取请求头信息
         Enumeration<String> headers = request.getHeaderNames();
         System.out.println("请求头信息");
         while(headers.hasMoreElements()){
             String headName = (String)headers.nextElement();
             String headValue = request.getHeader(headName);
             System.out.println(headName+":"+headValue);
         }
         System.out.println("请求参数");
         //request如果是post才有请求体,get则没有请求体,直接跟在?后面,用&隔开
         /**
          * getHeader(String name)获取单个请求头name对应的value
          * getHeaders(String name)获取多个请求头对应的一组value,因此返回的是枚举类型的数据
          * getHeaderNames()获取请求头的所有name值,返回的数据也是一个枚举类型数据,将枚举中的元素遍历出来,根据name取到value,即是请求头的所有信息
          */
         //获取客户端请求参数
         //request对象封装的参数是以Map的形式存储的
         Map<String, String[]> paramMap = request.getParameterMap();
         for(Map.Entry<String, String[]> entry :paramMap.entrySet()){
             String paramName = entry.getKey();
             String paramValue = "";
             String[] paramValueArr = entry.getValue();
             for (int i = 0; paramValueArr!=null && i < paramValueArr.length; i++) {
                 if (i == paramValueArr.length-1) {
                     paramValue+=paramValueArr[i];
                 }else {
                     paramValue+=paramValueArr[i]+",";
                 }
             }
             System.out.println(MessageFormat.format("{0}={1}", paramName,paramValue));
         }
         //请求体
         try {
             System.out.println("请求体");
             charReader(request);
         } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return "hello world";
     }
     
     void charReader(HttpServletRequest request) throws Exception{
         BufferedReader br = request.getReader();
         String str, wholeStr = "";
         while((str = br.readLine()) != null){
            wholeStr += str;
         }
         System.out.println(wholeStr);
     }
 }
 输出结果==============================================
请求头信息
 username:chen
 cache-control:no-cache
 postman-token:58cf0ebc-5448-4460-95db-8610bec65927
 content-type:text/plain
 user-agent:PostmanRuntime/7.4.0
 accept:*/*
 host:localhost:8080
 accept-encoding:gzip, deflate
 content-length:16
 connection:keep-alive
 请求参数
 school=XiaMen
 请求体
 {"class":"test"}
  往请求头header里设置参数和参数value,可以使用HttpClient访问rest接口,往请求头里添加token验证信息
CloseableHttpClient client = HttpClients.createDefault();
         HttpGet get = new HttpGet("http://localhost:8080/index");
         try {
             get.setHeader("token", "jdlj939399lKDN");
             CloseableHttpResponse response2 = client.execute(get);
             HttpEntity entity = response2.getEntity();
         } catch (ClientProtocolException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }