http请求头header、请求体body、请求行介绍

2023-05-16

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http请求头header、请求体body、请求行介绍 的相关文章

  • 从 Django 基于类的视图的 form_valid 方法调用特殊(非 HTTP)URL

    如果你这样做的话 有一个 HTML 技巧 a href New SMS Message a 点击新短信打开手机的本机短信应用程序并预 先填写To包含所提供号码的字段 在本例中为 1 408 555 1212 以及body与提供的消息 Hel
  • 如何使用 python http.server 运行 CGI“hello world”

    我使用的是 Windows 7 和 Python 3 4 3 我想在浏览器中运行这个简单的 helloworld py 文件 print Content Type text html print print print print h2 H
  • 如何将 POST 请求内容保存为 .NET 中的文件 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个客户端应用程序POST请求a
  • 如何自定义解析错误的 HTTP 400 响应?

    我编写了一个 REST API 服务 要求所有响应均为 JSON 但是 当 Go HTTP 请求解析器遇到错误时 它会返回 400 作为纯文本响应 而不会调用我的处理程序 例子 gt curl i H Authorization Basic
  • PHP cURL 代理带标头?

    我正在制作一个 PHP 图像代理脚本 我需要它不仅能够回显其请求的图像的内容 而且还能够以相同的方式重现图像请求的标头 我见过一个 另一个 但没有同时看到过 这些 cURL 选项让我感到困惑 我该怎么做 抱歉 我不确定你想要什么 这是从图像
  • 对于非文本媒体类型,发送带有 Content-Type 标头的字符集参数是否绝对错误?

    我发现了两个软件之间的错误 其中一个正在发出标头 Content Type application x bittorrent charset utf 8 另一个是错误地处理这个问题 但如果删除 charset 参数 则可以正确处理它 我需要
  • PHP - 函数内的 header("Location:") 重定向而不调用函数

    我正在使用一个名为的函数headerLocation 以便正确重定向 这是该函数的相关部分 我用它来重定向 然后显示适当的消息 个人偏好 function headerLocation location message SESSION ou
  • 使用传输编码分块的 HTTP 响应中的最大块大小是多少?

    The w3 org RFC2616 http www w3 org Protocols rfc2616 rfc2616 sec3 html sec3 6 1似乎没有定义块的最大大小 但是如果没有最大块大小 则没有空间用于块扩展 必须有一个
  • $http.get 和 method:'GET' 之间的区别

    我正在使用 Spring Data REST 并有一个 MySQL DB 来管理我的数据 我使用 AngularJS 编写了第一页 并希望从数据库中获取数据 为了获取我的数据 我知道有两种不同的方式 http get http myURL
  • 如何使用 Apache POI 在 java 中创建目录?

    任何人请给我一个简单的例子 我无法找到有关使用 Apache POI Docx 的目录的示例 谢谢 public class App public static void main String args throws Exception
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • 在 Heroku 上获取客户端的真实 IP 地址

    在任何 Heroku 堆栈上 我想获取客户端的 IP 我的第一次尝试可能是 request headers REMOTE ADDR 当然 这是行不通的 因为所有请求都是通过代理传递的 所以替代方法是使用 request headers X
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • HTTP 和 HTTPS iframe

    我正在创建一个小部件 我想允许其他人使用它 这iframe通过 HTTP 加载 但我想允许用户通过 HTTPS 登录 即通过 SSL 发送登录请求 同源策略中允许这样做吗 即 场景是用户可以将我的 JavaScript 集成到他们的网站 小
  • 列表视图标题和第一项之间的空白

    我创建了一个带有 ListView 的 Android 应用程序 我已将页眉和页脚添加到列表中 但是 当添加分隔符 分隔符时 它还会在标题和第一个 ListView 项之间创建一个空白空间 它对最后一个 ListView 项目和页脚执行相同
  • 外部依赖错误的 HTTP 状态代码

    当服务器与外部 API 通信出现问题时 返回的正确 HTTP 状态代码是什么 假设客户端向我的服务器 A 发送有效请求 然后 A 查询服务器 B 的 API 以便执行某些操作 然而 B 的 API 当前抛出 500 错误或因某种原因无法访问
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • Django 响应总是用 text/html 分块无法设置内容长度

    在我的Django应用程序的views py中 我在尝试设置以下HTTP标头字段后返回一个HttpResponse对象 Create a Response Object with the content to return response
  • 多次重定义错误

    在了解了有关类和指针的更多信息后 我重构了一个程序并删除了超过 200 行代码 在此过程中创建了另外两个类 Location and Piece 问题是 在编译完所有内容后 链接器抱怨构造函数Piece被定义了多次 有很多错误 In fun

随机推荐

  • 三维视觉论文阅读:RAFT2020双目光流

    论文 RAFT Recurrent All Pairs Field Transforms for Optical Flow 摘要 2020年下半年以来 xff0c 深度学习都逐渐走向了迭代优化 xff08 例如NeRf xff09 xff0
  • 三维视觉论文阅读:high-res-stereo2019双目立体视觉

    论文 Hierarchical Deep Stereo Matching on High resolution Images 摘要 本篇文章本人在看的时候 xff0c 感觉特别像StereoNet和StereoDRNet high res
  • 三维视觉论文阅读:MVSNet2018多视立体匹配

    论文 MVSNet Depth Inference for Unstructured Multi view Stereo 摘要 MVSNet是深度学习多视立体匹配的开山之作 xff08 我个人认为 xff09 xff0c 虽然其在网络结构上
  • 三维视觉论文阅读:RMVSNet2019多视立体匹配

    论文 Recurrent MVSNet for High resolution Multi view Stereo Depth Inference 摘要 MVSNet最大的问题是3D UNet xff0c 太耗费内存了 RMVSNet另辟蹊
  • 三维视觉论文实战:DenseDepth2019--网络结构及demo

    目的 本篇博客的主要目的是记录测试DenseDepth的demo的过程 xff0c 包括 pytorch模型构建 和 keras模型参数转pytorch 两大部分 xff0c 当然最后还有一个实验模块 注明以下 xff0c 本篇博客为啥要构
  • GTAV:原始影像和深度图获取

    背景 GTAV是一个非常好的游戏 xff0c 目前也已经被广泛应用到深度学习之中了 本篇博客简单介绍一下如何采集数据 1 数据采集 1 代码修改 本篇博客的代码来源于GTAVisionExport 但是上述代码中 xff0c 存在些许问题
  • Blender2.8:Blender Python渲染降噪节点(Cycles)

    参考 https www bilibili com read cv9221189 背景 Blender的Cycles渲染引擎存在非常多的噪声 方法 一个比较好的思路是利用 Denoising Data 和降噪节点 参考文档里的是手动设置 x
  • Ubuntu:显存占用及处理

    问题 在进行深度学习时 xff0c 显存是一种非常宝贵的资源 但是即便在Ubuntu下 xff0c 各种各样的系统配置都会不自觉的占用一些显存 xff0c 导致深度学习难以为继 在本博客中 xff0c 主要搬运一些查询显存占用原因及处理方法
  • Jittor:Jittor三千问

    Jittor三千问 记录一下在使用Jittor时遇到的问题和对应的解决方案 xff0c 持续更新 非常感谢梁盾博士的回复 1 Jittor如何指定显卡 xff1f 在运行脚本时 xff0c 使用 CUDA VISIBLE DEVICES 6
  • 机器学习:补课目录

    补课目录 xff1a xff08 已经完成 xff09 吴恩达DeepLearning ai xff1a Deep Learning Specialization xff08 正在进行 xff09 林轩田 机器学习基石 xff08 正在进行
  • conda:离线环境安装

    Aanconda的离线环境安装的必要条件是有一台可以联网的电脑 在后文中 xff0c 分别称可以联网的电脑为On line xff0c 不可以联网的电脑为Off line 以下即为对应的操作步骤 1 On line 下载annconda安装
  • Ubuntu:pip install gdal

    方法 sudo apt get update 必须首先安装gdal的lib xff0c python只是针对该lib的调用 sudo apt install gdal bin libgdal dev pip安装的版本必须和gdal一致 pi
  • Git:使用笔记

    git局部配置 git config user name 34 username 34 git config user email 34 email 34 git带用户密码clone git clone https username pas
  • Pytorch:conda安装不同版本的cuda

    我不会是最后一个知道可以用conda安装不同版本的cuda的人吧 通常的pytorch安装流程是 xff1a 首先安装NVIDIA驱动 xff0c 然后安装对应版本的cuda和cudnn最后再安装cuda支持的pytorch版本 然而实际上
  • obsidian使用技巧

    背景 obsidian是一个非常牛逼的本地笔记工具 xff0c 极大的提高了本人的学习能力 xff0c 卷的更加厉害了 此处简要记录一下在使用过程中遇到问题和对应的解决方案 xff0c 至于具体的使用方法网上多的是就不介绍了 三方插件推荐
  • ubuntu:命令行查询文件(夹)大小

    背景 使用命令行查询文件文件 夹 大小 参考 https www cnblogs com zhengyiqun1992 p 11183819 html 使用方法 查看当前文件夹下文件大小 ll h 输出如下 xff0c 其中文件夹大小是错误
  • VSCode:remote-ssh多级跳转

    背景 vscode目前是非常流行的编程工具 xff0c 提供了大量的插件 xff0c 尤其是其中的remote ssh xff0c 能够提供远程ssh连接服务器 xff0c 居家办公两不误 然而比较麻烦的事情是 xff0c 通常服务器为了保
  • Jittor:Jittor1.3.1之离线安装

    背景 Jittor是一个非常牛逼的框架 xff0c 维护了大量的官方demo xff0c 非常容易上手 与其他方法相比 xff0c 采用了即时编译的流程 xff0c 因此在效率上往往更高 但是在使用Jittor的过程中 xff0c 也遇到了
  • 灵活的按键处理程序 FlexibleButton,C程序编写,无缝兼容任意的处理器,支持任意 OS 和 non-OS

    灵活的按键处理程序 FlexibleButton 前言概述获取测试DEMO 程序说明程序入口用户初始化代码事件处理代码 FlexibleButton 代码说明按键事件定义按键注册接口按键事件读取接口按键扫描接口 问题和建议 前言 正好工作中
  • http请求头header、请求体body、请求行介绍

    HttpServletRequest对象代表客户端的请求 当客户端通过http协议请求访问 服务器的时候 http请求头的所有信息都封装在这个对象中 xff0c 通过这个对象 xff0c 可以获取客户端请求的所有信息 http请求包含请求行