精华内容
下载资源
问答
  • 通过java后台设置请求头部 可以根据需求修改或者添加请求头信息。 修改请求头代码 根据不同的请求方式,在main方法中选择调用不同的方法(get/post ) package com.iao.controller.feedback; import java.io....

    本文涉及两种请求方式,即 get 和 post 。通过java后台设置请求头部 可以根据需求修改或者添加请求头信息。

    修改请求头代码

    根据不同的请求方式,在main方法中选择调用不同的方法(get/post )

    package com.iao.controller.feedback;
    
    
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.InetAddress;
    import java.net.URL;
    import java.net.UnknownHostException;
    
    public class HttpBrokerController {
    
        public static final String GET_URL = "http://47.98.18.172:8010/stock/login?account=402121226&password=112124";
    
    
        // 测试接口
        public static final String POST_URL = "http://116.11.122.12:8180/mdserver/service/installLock";
    
        /**
         * 接口调用 GET
         */
        public static void httpURLConectionGET() {
            try {
                URL url = new URL(GET_URL);    //把字符串转换为URL请求地址
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打开连接
                //addRequestProperty添加相同的key不会覆盖,如果相同,内容会以{name1,name2}
                connection.addRequestProperty("from", "sfzh");  //来源哪个系统
                //setRequestProperty添加相同的key会覆盖value信息
                //setRequestProperty方法,如果key存在,则覆盖;不存在,直接添加。
                //addRequestProperty方法,不管key存在不存在,直接添加。
                connection.setRequestProperty("user", "user");  //访问申请用户
                InetAddress address = InetAddress.getLocalHost();
                String ip = address.getHostAddress();//获得本机IP
                connection.setRequestProperty("ip", ip);  //请求来源IP
                connection.setRequestProperty("encry", "00000");
                //connection.setRequestProperty("设置请求头key", "请求头value");
                connection.connect();// 连接会话
                // 获取输入流
                BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
                String line;
                StringBuilder sb = new StringBuilder();
                while ((line = br.readLine()) != null) {// 循环读取流
                    sb.append(line);
                }
                br.close();// 关闭流
                connection.disconnect();// 断开连接
                System.out.println(sb.toString());
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("失败!");
            }
        }
    
        /**
         * 接口调用  POST
         */
        public static void httpURLConnectionPOST() {
            try {
                //传递参数
                String Parma = "?cardType={}&cardID={}";
    
                URL url = new URL(POST_URL);
                // 将url 以 open方法返回的urlConnection  连接强转为HttpURLConnection连接  (标识一个url所引用的远程对象连接)
                // 此时cnnection只是为一个连接对象,待连接中
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                // 设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数)
                connection.setDoOutput(true);
                // 设置连接输入流为true
                connection.setDoInput(true);
                // 设置请求方式为post
                connection.setRequestMethod("POST");
                // post请求缓存设为false
                connection.setUseCaches(false);
                // 设置该HttpURLConnection实例是否自动执行重定向
                connection.setInstanceFollowRedirects(true);
                // 设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数)
                // application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据
                // ;charset=utf-8 必须要,不然妙兜那边会出现乱码【★★★★★】
                //addRequestProperty添加相同的key不会覆盖,如果相同,内容会以{name1,name2}
                connection.addRequestProperty("from", "sfzh");  //来源哪个系统
                //setRequestProperty添加相同的key会覆盖value信息
                //setRequestProperty方法,如果key存在,则覆盖;不存在,直接添加。
                //addRequestProperty方法,不管key存在不存在,直接添加。
                connection.setRequestProperty("user", "user");  //访问申请用户
                InetAddress address = InetAddress.getLocalHost();
                String ip = address.getHostAddress();//获得本机IP
                connection.setRequestProperty("ip", ip);  //请求来源IP
                connection.setRequestProperty("encry", "123456");
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
                // 建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)
                connection.connect();
                // 创建输入输出流,用于往连接里面输出携带的参数,(输出内容为?后面的内容)
                DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
                // 格式 parm = aaa=111&bbb=222&ccc=333&ddd=444
                String parm = "username=zhagnsan&password=0000";
                System.out.println("传递参数:" + parm);
                // 将参数输出到连接
                dataout.writeBytes(parm);
                // 输出完成后刷新并关闭流
                dataout.flush();
                dataout.close(); // 重要且易忽略步骤 (关闭流,切记!)
                //System.out.println(connection.getResponseCode());
                // 连接发起请求,处理服务器响应  (从连接获取到输入流并包装为bufferedReader)
                BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
                String line;
                StringBuilder sb = new StringBuilder(); // 用来存储响应数据
    
                // 循环读取流,若不到结尾处
                while ((line = bf.readLine()) != null) {
                    //sb.append(bf.readLine());
                    sb.append(line).append(System.getProperty("line.separator"));
                }
                bf.close();    // 重要且易忽略步骤 (关闭流,切记!)
                connection.disconnect(); // 销毁连接
                System.out.println(sb.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) throws UnknownHostException {
            httpURLConectionGET();
            //httpURLConnectionPOST();
        }
    }

    HTTP请求头Header及其作用详解

    下面是访问的一个URL,http://www.hzau.edu.cn的一个header,根据实例分析各部分的功能和作用。

    1、Accept,浏览器端能够处理的内容类型。

    例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档。如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)。通配符 * 代表任意类型,例如 Accept: / 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。

    2、Accept-Encoding, 浏览器能够处理的的压缩编码。通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是指字符编码)。

    例如: Accept-Encoding: zh-CN,zh;q=0.8

    3、Accept-Language, 浏览器当前设置的语言。

    语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;例如: Accept-Language: en-us

    4、Accept_Charset::浏览器能够显示的字符集

    5、Connection:浏览器与服务器的连接类型

    例如:Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

    例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭。

    当客户端再次发送Request,需要重新建立TCP连接。

    6、Host,发送请求的页面的域名。(发送请求时,该报头域是必需的),请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。

    例如: 我们在浏览器中输入:http://www.hzau.edu.cn,浏览器发送的请求消息中,就会包含Host请求报头域,如下:

    Host:www.hzau.edu.cn,此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号。

    7、Referer,发送请求的页面的URI。当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。

    比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

    8、User-Agent,浏览器的用户代理字符串。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。

    我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

    例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA;

    .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)

    9、Cookie,用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见)。

    比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。

    8、Cache-Control,指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据,还是重新发请求到服务器获取数据。

    我们网页的缓存控制是由HTTP头中的“Cache-control”来实现的,常见值有private、no-cache、max-age、must-revalidate等,默认为private。这几种值的作用是根据重新查看某一页面时不同的方式来区分的:

    (1)、打开新窗口

    值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值(单位为秒),那么在此值内的时间里就不会重新访问服务器,例如:

    Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)

    (2)、在地址栏回车

    值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。

    值为no-cache,那么每次都会访问。

    值为max-age,则在过期之前不会重复访问。

    (3)、按后退按扭

    值为private、must-revalidate、max-age,则不会重访问,

    值为no-cache,则每次都重复访问

    (4)、按刷新按扭

    无论为何值,都会重复访问

    10、If-Modified-Since, 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。

    如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。

    例如:Mon, 17 Aug 2015 12:03:33 GMT

    11、If-None-Match, If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能。

    Intellij IDEA使用restclient测试

    Intellij IDEA内置了restclient来帮忙我们测试我们的后台代码,让我们可以脱离第三方工具测试,也更不需要我们编写前端代码,直接让我们能想网站发送get,post,put,delete等请求,十分方便。

    1.打开Test Restful Web Service

    点击Tools,选择Test Restful Web Service
    这里写图片描述

    2. 选择请求方式

    http method 选择请求方式
    host/port 填写请求ip和端口
    path 填写具体路径
    这里写图片描述

    3.设置请求头信息、参数等

    headers 填写请求头部信息,可自行设置 和添加等
    request parameters 设置请求参数信息
    可以利用后面的 + / - 进行参数的添加和删除
    这里写图片描述

    大功告成,点击控制台左上方执行按钮,运行后就会在控制台输出返回数据。

    致谢:(参考)
    https://blog.csdn.net/tangxiujiang/article/details/79664710
    https://blog.csdn.net/javalixy/article/details/78427617

    展开全文
  • 小弟最近前端中用xmlhttprequest发送ajax请求,想设置请求头,于是 ``` xhr.setrequestheader('testheader','testtest') ``` 其中xhr是xmlhttprequest的实例对象,为什么设置了以后发送请求查看network时其是在 ...
  • http请求头header、请求体body、请求行介绍

    万次阅读 多人点赞 2019-06-09 09:47:54
    服务器的时候,http请求头的所有信息都封装在这个对象中,通过这个对象,可以获取客户端请求的所有信息。http请求包含请求行/状态行、请求头、请求体。 request如果是post才有请求体,get则没有请求体,直接跟在?...

    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"}

    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();
            }

     

    展开全文
  • Spring Cloud Feign 请求时附带请求头

    千次阅读 2020-10-15 09:51:12
    Spring Cloud Feign 请求时附带请求头问题描述解决方案FeignConfiguration使用配置修改 问题描述 Feign 在请求时是不会将 request 的请求头带着请求的,导致假如 Feign 调用的接口需要请求头的信息,比如当前用户的 ...

    Spring Cloud Feign 请求时附带请求头

    问题描述

    Feign 在请求时是不会将 request 的请求头带着请求的,导致假如 Feign 调用的接口需要请求头的信息,比如当前用户的 token 之类的就获取不到

    解决方案

    FeignConfiguration

    通过实现 Feign 的 RequestInterceptor 将从上下文中获取到的请求头信息循环设置到 Feign 请求头中。

    /**
     * feign 配置文件
     * 将请求头中的参数,全部作为 feign 请求头参数传递
     * @author: linjinp
     * @create: 2020-06-28 09:54
     **/
    @Configuration
    public class FeignConfiguration implements RequestInterceptor {
        @Override
        public void apply(RequestTemplate requestTemplate) {
            HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
            Enumeration<String> headerNames = request.getHeaderNames();
            if (headerNames != null) {
                while (headerNames.hasMoreElements()) {
                    String name = headerNames.nextElement();
                    String values = request.getHeader(name);
                    requestTemplate.header(name, values);
                }
            }
        }
    }
    

    使用

    通过 configuration = FeignConfiguration.class 指定这次 Feign 请求走哪种配置

    @FeignClient(name = "admin", contextId = "factoryPlmseriesRelation", configuration = FeignConfiguration.class)
    //@FeignClient(name = "admin2", contextId = "factoryPlmseriesRelation", url = "http://127.0.0.1:8582/", configuration = FeignConfiguration.class)
    public interface FeignFactoryPlmseriesRelationService {
    
        /**
         * 根据当前用户,获取工厂与PLM关联关系
         * @return
         */
        @GetMapping(value = "/factoryPlmseriesRelation/getFactoryPlmseriesRelation")
        ErrorMsg<List<FactoryPlmseriesRelationVo>> getFactoryPlmseriesRelation();
    
    }
    

    配置修改

    主要是 hystrix.command.default.execution.isolation 后面的配置,需要将 hystrix 配置为信号量模式,否则会出现由于隔离策略导致获取不到请求头

    # ribbon 配置
    ribbon:
      OkToRetryOnAllOperations: false #对所有操作请求都进行重试,默认false
      ReadTimeout: 5000   #负载均衡超时时间,默认值5000
      ConnectTimeout: 5000 #ribbon请求连接的超时时间,默认值2000
      MaxAutoRetries: 0     #对当前实例的重试次数,默认0
      MaxAutoRetriesNextServer: 1 #对切换实例的重试次数,默认1
    # hystrix 配置
    hystrix:
      command:
        default:  #default全局有效,service id指定应用有效
          execution:
            timeout:
              #是否开启超时熔断
              enabled: true
            isolation:
              thread:
                timeoutInMilliseconds: 10000 #断路器超时时间,默认1000ms
              # hystrix 隔离模式改为信号量模式,feign 才能获取到父线程中的请求头
              strategy: SEMAPHORE
              # 允许的并发量,默认值为 10
              semaphore:
                maxConcurrentRequests: 100
    
    展开全文
  • HttpServletRequest对象概述 ...由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法。 我们在创建Servlet时会覆盖serv...

    HttpServletRequest对象概述

    在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletReauest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法。

    我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。
    service方法中的request的类型是ServletRequest,而doGet/doPost方法的request的类型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加强大,今天我们学习HttpServletRequest。

    request的运行流程

    在这里插入图片描述

    通过抓包工具抓取HTTP请求

    在这里插入图片描述

    通过request获得请求行信息

    当访问Servlet时,会在请求消息的请求行中,包含请求方法、请求资源名、请求路径等信息,为了获取这些信息,在HTTPServletRequest接口中,定义了一系列用于获取请求行的方法,如下表:

    方法声明功能描述
    String g e t M e t h o d \color{red}{getMethod} getMethod该方法用于获取HTTP请求消息中的请求方式(如GET、POST等)
    String getReauestURI()该方法用于获取请求行中资源名称部分,即位于URL的主机和端口之后、参数部分之前的部分
    String getQueryString()该方法用于获取请求行中的参数部分,也就是资源路径后面问号以后的所有内容
    String getProtocol()该方法用于获取请求行中的协议名和版本,例如,HTTP/1.0 或 HTTP/1.1
    String g e t C o n t e x t P a t h ( ) \color{red}{getContextPath()} getContextPath()该方法用于获取请求URL中属于WEB应用程序的路径,这个路径以"/"开头,表示相对于整个WEB站点的根目录,路几个结尾不含“/”。如果请求URL属于web站点的根目录,那么返回结果为空字符串“”
    String getServletPath()该方法用于获取Servlet的名称或Servlet所映射的路径
    String g e t R e m o t e A d d r ( ) \color{red}{getRemoteAddr()} getRemoteAddr()该方法用于获取请求客户端的IP地址,其格式类似于"192.168.0.1"
    String getRemoteHost()该方法用于获取请求客户端的完整主机名,其格式类似于"pc1.xxxx.cn"。需要注意的是,如果无法解析出客户机的完整主机名,该方法会返回客户端的IP地址
    int getRemotePort()该方法用于获取请求客户端网络连接的端口号
    String getLocalAddr()该方法用于获取Web服务器上接收当前请求网络连接的IP地址
    String getLocalName()该方法用于获取Web服务器上接收当前网络连接IP所对应的主机名
    int getLocalPort()该方法用于获取Web服务器上接收当前网络连接的端口号
    String getServerName()该方法用于获取当前请求所指向的主机名,即HTTP请求消息中HOST头字段所对应的主机名部分
    int getServerPort()该方法用于获取当前请求所连接的服务器端口号,即如果HTTP请求消息中HOST头字段所对应的端口号部分
    String getScheme()该方法用于获取请求的协议名,例如http、https或ftp
    StringBuffer getRequestURL()该方法用于获取客户端发出请求时的完整URL,包括协议、服务器名、端口号、资源路径等信息,但不包括后面的查询参数部分。注意,getRequestRUL()方法返回的时StringBuffer类型,而不是String类型。

    示例:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            //获取请求行的相关信息
            out.println("getMethod:" + request.getMethod() + "<br/>");
            out.println("getQueryString:" + request.getQueryString() + "<br/>");
            out.println("getProtocol:" + request.getProtocol() + "<br/>");
            out.println("getContextPath" + request.getContextPath() + "<br/>");
            out.println("getPathInfo:" + request.getPathInfo() + "<br/>");
            out.println("getPathTranslated:" + request.getPathTranslated() + "<br/>");
            out.println("getServletPath:" + request.getServletPath() + "<br/>");
            out.println("getRemoteAddr:" + request.getRemoteAddr() + "<br/>");
            out.println("getRemoteHost:" + request.getRemoteHost() + "<br/>");
            out.println("getRemotePort:" + request.getRemotePort() + "<br/>");
            out.println("getLocalAddr:" + request.getLocalAddr() + "<br/>");
            out.println("getLocalName:" + request.getLocalName() + "<br/>");
            out.println("getLocalPort:" + request.getLocalPort() + "<br/>");
            out.println("getServerName:" + request.getServerName() + "<br/>");
            out.println("getServerPort:" + request.getServerPort() + "<br/>");
            out.println("getScheme:" + request.getScheme() + "<br/>");
            out.println("getRequestURL:" + request.getRequestURL() + "<br/>");
        }
    

    通过浏览器访问,页面显示:
    在这里插入图片描述

    通过request获得请求头

    当请求Servlet时,需要通过请求头向服务器传递附加信息,例如,客户端可以接收的数据类型,压缩方式,语言等。为此,在HttpServletRequest接口中,定义了一系列用于获取HTTP请求头字段的方法,如下表:

    方法声明功能描述
    String getHeader(String name)该方法用于获取一个指定头字段的值,如果请求消息中没有包含指定的头字段,getHeader()方法返回null;如果请求消息中包含有多个指定名称的头字段,getHeader()方法返回其中第一个头字段的值
    Enumeration getHeaders(String name)该方法返回一个Enumeration集合对象,该集合对象由请求消息中出现的某个指定名称的所有头字段值组成。在多数情况下,一个头字段名在请求消息中只出现一次,但有时候可能会出现多次
    Enumeration getheaderNames()该方法用于获取一个包含所有请求头字段的Enumeration对象
    int getIntHeader(String name)该方法用于获取指定名称的头字段,并且将其值转换为int类型。需要注意的是,如果指定名称的头字段不存在,返回值为-1;如果获取到的头字段的值不能转为int类型,将发生NumberFormatException异常
    Long getDateHeader(String name)该方法用于获取指定头字段的值,并将其按GMT时间格式转换成一个代表日期/时间的长整数,这个长整数是自1970年1月1日0点0分0秒算起的以毫秒为单位的时间值
    String getContentType()该方法用于获取Content-Type头字段的值,结果为String类型
    int getContentLength()该方法用于获取Content-Length头字段的值,结果为int类型
    String getCharacterEncoding()该方法用于返回请求消息的实体部分的字符集编码,通常是从Content-Type头字段中进行提取,结果为String类型

    示例:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            //获取请求头信息
            Enumeration headerNames = request.getHeaderNames();
            //使用循环遍历请求头,并通过getHeader()方法获取一个指定名称的头字段
            while (headerNames.hasMoreElements()){
                String headerName = (String) headerNames.nextElement();
                out.println(headerName + " : " + request.getHeader(headerName) + "<br/>");
            }
        }
    

    通过浏览器访问,页面显示:
    在这里插入图片描述

    通过request获得请求体(请求参数)

    在实际开发中,经常需要获取用户提交的表单数据,例如,用户名,密码、电子邮件等,为了方便获取表单中的请求参数,在HttpServletRequest接口总,定义了一些列获取请求参数的方法,如下表所示:

    方法声明功能描述
    String getParameter(String name)该方法用于获取某个指定名称的参数值,如果请求消息中没有包含指定名称的参数,getParameter()方法返回null;如果指定名称的参数存在但没有设置值,则返回一个空串;如果请求消息中包含有多个该指定名称的参数,getParameter()方法返回第一个出现的参数值
    String[] getParameterValues(String name)HTTP请求消息中可以有多个相同名称的参数(通常由一个包含有多个同名的字段元素的FORM表单生成),如果要获得HTTP请求消息中的同一个参数名所对应的所有参数值,那么就应该使用getParameterValues()方法,该方法用于返回一个String类型的数组
    Enumeration getParameterNames()该方法用于返回一个包含请求消息中所有参数名的Enumeration对象,在此基础上,可以对请求消息中的所有参数进行遍历处理
    Map getParameterMap()个体Parameter Map()方法用于将请求消息中的所有参数名和值装入进一个Map对象中返回

    示例:
    创建一个带有表单的jsp页面:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>表单</title>
    </head>
    <body>
        <form action="/JavaEEDemo/request" method="post">
            用户名:<input type="text" name="username"><br/>&nbsp;&nbsp;码:<input type="password" name="password"><br/>&nbsp;&nbsp;好:
            <input type="checkbox" name="hobby" value="sing">唱歌
            <input type="checkbox" name="hobby" value="dance">跳舞
            <input type="checkbox" name="hobby" value="football">足球
            <input type="submit" value="提交">
    
        </form>
    </body>
    </html>
    

    编写Servlet的doPost方法:

    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            System.out.println("用户名:" + username);
            System.out.println("密码:" + password);
    
            //获取参数名为hobby的值
            String[] hobbys = request.getParameterValues("hobby");
            System.out.println("爱好:");
            for (int i = 0; i < hobbys.length; i++) {
                System.out.println(hobbys[i] + ", ");
            }
        }
    

    通过浏览器访问jsp页面:
    在这里插入图片描述
    点击提交后,控制条输出:

    用户名:zhangsan
    密码:123456
    爱好:
    sing, 
    dance, 
    football, 
    
    展开全文
  • JavaWeb - 常用的HTTP请求头与响应头

    千次阅读 2018-06-25 10:32:52
    客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码...
  • HTTP请求行、请求头、请求体详解

    万次阅读 多人点赞 2018-11-02 11:36:24
    HTTP请求报文由3部分组成(请求行+请求头+请求体):  下面是一个实际的请求报文:  ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只...
  • http基本请求头详解

    万次阅读 2018-10-03 20:38:09
    当接下来再发送同样的请求时,会在请求头中添加上这个字段If-Modified-Since; 服务器端读取字段值,判断服务器端文件的最后修改时间,如果如果不晚于该值,说明浏览器缓存的文件是最新的,然后就不会重新发送...
  • Java发送get/post请求,获取响应结果,这是一个常见操作。为此封装一个Java类,做发送GET/POST请求,然后解析返回参数。
  • axios设置请求头,删除请求头

    千次阅读 2020-08-04 15:29:16
    axios设置请求头_删除请求头 首先描述下我在项目中的应用场景: 因为项目中用户登录后后台会返回该用户对应的token,然后以后再请求数据时都需要再请求头中携带这个token。但但但,但是,登录也是个接口,我发现登录...
  • vue img 图片需要自定义请求头

    千次阅读 2021-02-03 09:46:37
    在做项目的时候,展示图片可能会用到nginx 的代理来进行展示,然而有些运维小哥哥喜欢...我们现在跨域思考一下,img标签是没有可以自定义请求头的。网上说的那些,个人感觉都不行,一个爬一个。 我的解决办法 分析:.
  • HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。如果服务器不能处理太长的URI的时候...
  • ajax请求携带cookie、自定义header总结: 错误: 1.ajax请求时是不会自动带上cookie的,要是想让他带上的话,必须设置withCredential为true。 正确: 1.ajax同域请求下,ajax...并且不会因为增加自定义请求头header...
  • requests设置请求头、代理

    万次阅读 2020-06-17 21:40:50
    设置请求头和代理,可以解决一些简单的反爬措施。
  • HTTP 请求头各参数具体含义

    千次阅读 2020-06-09 10:22:19
    HTTP 请求头各参数具体含义 HTTP的头域包括通用头、请求头、响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。 通用头部:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他...
  • ajax请求中自定义添加请求头

    千次阅读 2019-06-11 11:50:08
    在使用ajax请求业务接口时需要使用请求头进行身份验证,方式如下: $(function () { $.ajax({ type: 'GET', url: '/xxxx-api/openapi/url/getBusinessUrl', data: 'ip=10.10.190.1&bizCode=JDCWFCX', ...
  • 请求头跨域

    千次阅读 2019-11-26 16:13:25
    经过各种百度和交流群求救才解决问题,虽然我的最终问题有点坑,但还是感谢发烧友的帮助明白了这是一个请求响应头跨域问题,并且致命点在于没搞清楚响应头和请求头之间的关系,实际上响应头和请求头原来是包含关系。...
  • 1.ajax发送请求,红色部分为自定义添加的请求头信息//上传视频文件  function uploadfile(el) {  &lt;@shiro.user&gt;  var userId = &lt;@shiro.principal property = "id"/&gt;  &...
  • 请求头中包含: Host Connection Keep-Alive Accept-charset Accept-Encoding If-Modified-Since If-None-Match If-Range Range getResponseHeader() 获取指定请求头 语法: getResponseHeader(name) ...
  • java获取和设置请求头

    千次阅读 2019-09-04 11:49:23
    获取请求头内容: 获取请求头数据:request方法 String getHeader(String name):通过请求头的名称获取请求头的值 Enumeration getHeaderNames():获取所有的请求头名称 protected void doGet(HttpServletRequest ...
  • HTTP请求头referer

    万次阅读 2020-09-09 16:55:18
    然后又因为不同的浏览器客户端对请求头处理规则不一样,所以造成了这个问题。 也因为这个问题,补充了一个知识点,就是图片防盗链的基本原理。所以遇到一个问题后,通过学习可以补充不少相关联的知识点。✌️ 本文...
  • 页面和服务器交互最常见的方式就是ajax,ajax简单来说是浏览器发送请求到服务端,然后服务端返回数据,常见的请求头和响应头如下图所示。   先看通用信息,通用信息有三个字段: 请求url地址, 请求方法, 状态码。...
  • 1.老版本的后台接口post请求头是:application/x-www-form-urlencoded axios不支持 解决方案 1.设置axios请求头为application/x-www-form-urlencoded headers: {'Content-type': 'application/x-...
  • http请求修改请求头

    千次阅读 2019-07-03 13:59:54
    2.设置请求头和请求体代码片段: public static String sendG7Post(String url,String params) { HttpClient httpClient = null; HttpPost postMethod = null; HttpResponse response = null; String ...
  • 现在有一个需求场景是,每一个请求我都需要在请求头里面加上token这个请求头,作为一种校验机制,传统的接口可以通过设置一个全局的变量,然后通过页面携带过来(大概就是先将我们的token放在session中,写一个服务...
  • timeout: 5000, // 请求超时时间 headers: { "content-type": "application/x-www-form-urlencoded" } }); axios默认是 application/json (如果不设置的话) 单独: that.$axios .post(this.$api + "/api/Sys/...
  • Http请求头和响应头

    万次阅读 多人点赞 2017-07-19 22:14:24
    首先来点自传:之前做网络请求知道有一个请求头,但是做开发的时候因为提前弄好了开发框架,设置好了请求头,所以一直没有关注过。现在这家你公司是一个资讯类公司,总是接别人的接口,所以遇到了各种奇葩的没见过的...
  • SpringMVC/SpringBoot2中使用@RequestHeader获取请求头 springMVC/SpringBoot中提供了@RequestHeader注解用来获取请求头。 一、使用@RequestHeader获取请求头 (一)获取某一个请求头 例如,获取accept-language...
  • 通过iframe请求的链接是没有请求头Origin的 例如: **一、通过iframe请求** ``` ;" src="https://www.babidu.com/?requestType=iframe&_=1551691168203" frameborder="0" scrolling="no"></iframe> ``` ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 789,878
精华内容 315,951
关键字:

请求头