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、请求行介绍 的相关文章

  • Retrofit 2 - 在 api 级别添加标头的优雅方式

    我的改装2 2 0 2当前 客户端需要向请求添加自定义标头 我正在使用一个Interceptor将这些标头添加到所有请求中 OkHttpClient httpClient new OkHttpClient httpClient networ
  • MultipartEntityBuilder 和 setCharset for UTF-8 发送空内容

    我需要将 unicode 字符提交到表单 以将我的应用程序本地化到使用非拉丁字母的国家 地区 关于新的 MultiPartEntityBuiler 的文档很少 我只找到了另一篇建议使用 setCharset 的帖子 如果我不使用 Entit
  • 检测 PHP 中的请求类型(GET、POST、PUT 或 DELETE)

    如何检测 PHP 中使用了哪种请求类型 GET POST PUT 或 DELETE Answer recommended by PHP collectives php Collective By using SERVER REQUEST M
  • 在 C++ 程序中包含 C 头文件

    我有一个 C 程序 cpp 在其中我希望使用 C 头文件中存在的一些函数 例如 stdio h conio h stdlib h graphics h devices h 等 我可以将 stdio h 库包含在我的 cpp 文件中 如下所示
  • Solidity有HTTP请求功能吗?

    我正在使用以太坊制作一个项目 在这个项目中 我正在签订一份名为 A 的合同 当我向 A 发送消息时 我希望 A 发出网络请求 Solidity 是否可以使用 http 请求 方法 GET POST 以太坊区块链无法与外界交互 否则它将不再是
  • 对于“未找到项目”错误页面,最合适的 HTTP 状态代码是什么

    我很好奇 项目不存在 页面最合适的 HTTP 状态代码是什么 如果页面本身不存在 我显然会使用 404 但是 我的其中一个页面有一个userid参数 它是一个 编辑用户 页面 如果不存在具有给定用户 ID 的用户 我将显示一个错误页面 但我
  • 我想使用条件注释使 DIV 仅出现在 IE7 或更早版本的浏览器中 如下所示 据我了解 条件注释仅在标题中起作用 这很糟糕吗 我应该使用条件注释来插入一个样式表来创建不可见的 DIVvisibility visible 是的bad http
  • 重定向后,curl 对所有请求使用 POST

    根据文档和一些类似的问题 SOcurl 应该遵循使用 GET 方法的重定向 除非将 post30x 指定为参数 但这是我测试的结果 curl kvv b tmp tmp BEo6w3GKDq c tmp tmp BEo6w3GKDq X P
  • Android Http 获取会话 Cookie

    我本来不想在这里发帖 因为网上有太多信息 但我已经深入搜寻但无法弄清楚 好吧 所以我无法让它在两种情况下工作 希望这两种情况的答案是相同的 我的问题是我设置了请求标头 但它似乎没有发送它 我有一个会话 id s e32ff223fwefd3
  • Android 列表视图与部分

    您好 我在尝试了解分段列表视图的工作原理时遇到问题 我让它工作到正常的列表视图中 但现在我想将部分添加到我的列表中 如何在其中添加节标题 这是我有效的代码 public class ChooseTeamActivity extends Li
  • 将照片上传到 Google Photos API 不返回上传令牌

    我正在使用 2018 版 Google Photos API 来上传图像和媒体 如下所述 上传字节 https developers google com photos library guides upload media uploadi
  • 扩展无法启用或安装的问题

    php 7 3 5 你好 我的扩展 ext http 有问题 composer 说我缺少 ext http 即使我在composer json 中写了这个 为什么 这就是这个确切的消息 问题1 您的系统中缺少请求的 PHP 扩展 ext h
  • PHP 标头重定向 301 - 有何影响?

    I have example com 如果用户登录 它应该自动加载example com option X其中 X 是用户的预定义选择 所以 我在顶部这样做index php header Location option X 但是 如果用户
  • 无法使用 Spring 的 WebServiceTemplate 将 Http 标头添加到消息中

    我有一个相当简单的情况 我尝试将 HTTP 标头 不是 SOAP 标头 添加到我使用 Spring 发出的请求中WebServiceTemplate 我定义了一个ClientInterceptor我在哪里做 Override public
  • Django:如何在ajax中返回模型表单集并在模板中使用

    我需要在运行时使用ajax动态地将表单添加到我的表单集中 我指的是使用 Ajax 将表单动态添加到 Django 表单集 https stackoverflow com questions 501719 dynamically adding
  • 使用 RCurl 登录 WordPress

    我想使用 R 的 RCurl 包登录 WordPress 网站 以便安装 WordPress 插件 可能在 WordPress 的某些选项页面上使用 postForm 由于该网站受密码保护 我请求您帮助如何验证我的 R 会话 我发现以下三个
  • IIS7 和 HTTP 状态代码处理

    我因试图对 IIS7 集成模式 中的错误呈现进行完整的编程控制而感到非常头疼 我想要做的是给出一个错误 找不到页面 内部服务器错误 未经过身份验证等 将整个请求传输到自定义 ASPX 或 HTML 我更喜欢后者 并使用正确的 HTTP 状态
  • 如何在 http POST 请求中发送 HTML 代码?

    我正在从 Google Web Toolkit 应用程序向 php 脚本发送 HTTP POST 请求 内容类型现在是 application x www form urlencoded 所以我可以将变量发送到 php 并使用 POST 在
  • Angular:将数据从工厂 ajax 调用传递回我的控制器

    我一直在使用 Angular 并且已经从使用本地数据 似乎工作正常 转向尝试通过工厂中的 ajax 调用来填充我的视图 这是代码 div h2 Get data using a Factory h2 div div div
  • 如何在 ASP.NET Core 控制器中接收“multipart/mixed”

    旧系统会向我发送以下内容 POST xml HTTP 1 1 Host localhost 9000 User Agent curl 7 64 1 Accept Content Length 321 Content Type multipa

随机推荐

  • 三维视觉论文阅读: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请求包含请求行