Forest Forest
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
  • 序言

    • 🎁 新手介绍
    • 📖 文档
    • 🌰 使用案例
    • 🕵️‍ 关于作者
    • 👨‍🎓 贡献者列表
  • 入门

    • 🎬 安装配置说明
    • 🏹 Springboot环境安装
    • 📐 Springboot环境配置
    • 🎯 Springboot环境使用
    • 🏹 Springboot3环境安装
    • 📐 Springboot3环境配置
    • 🎯 Springboot3环境使用
    • 🏹 Spring环境安装
    • 📐 Spring环境配置
    • 🎯 Spring环境使用
    • 🏹 Solon环境安装
    • 📐 Solon环境配置
    • 🎯 Solon环境使用
    • 🏹 原生Java环境安装
    • 📐 原生Java环境配置
    • 🎯 原生Java环境使用
    • 🧬 编程式接口
  • 配置项

    • 👜 Springboot环境配置项
    • 👝 Spring环境配置项
    • 👜 Solon环境配置项
    • 🎒 原生Java环境配置项
    • 📚 配置优先级/作用域
  • 声明式接口

    • 🧱 构建接口
    • 🍀 请求方法
    • 🚚 请求地址
    • 🎈 URL 参数
    • 🍭 请求头
    • 👔 请求体
    • 🍮 后端框架
    • 🧁 接口注解
    • 📬 接收数据
    • 🍛 数据转换
    • 🍓 成功/失败条件
    • 🍌 重试机制
    • 🥂 重定向
    • 🍔 Gzip解压
    • 🎂 日志管理
    • ⚽ 回调函数
    • 🍟 异步请求
    • 🛡️ HTTPS
    • 🍪 使用Cookie
    • 🛸 使用代理
    • 🍉 上传下载
    • 🚑 异常处理
  • 编程式接口

    • 请求API

      • 🚀 请求对象
      • 🚢 请求属性
      • ✨ 执行请求
      • 🎊 后端框架
      • 🎪 请求类型
      • 🔮 请求地址
      • 🧀 URL 参数
      • 🚅 请求头
        • 添加请求头
        • 添加多个请求头
        • 添加延迟请求头
        • 修改请求头
        • 获取请求头
        • 特殊请求头
      • 🚋 请求体
      • ⚓ 回调函数
      • 🚁 异步请求
      • 🥯 Cookie
      • 🍜 成功/失败条件
      • 🌶️ 重试机制
      • ⛵ 重定向
      • 🛰️ 请求代理
    • 响应API

      • 🌠 响应对象
      • ✒️ 读取数据
      • 🦋 响应状态码
      • 🏥 响应错误处理
      • 🎧 响应头
      • 🥞 Cookie
  • 模板表达式

    • 🍬 Hello World
    • 🍹 配置属性引用
    • 🍖 变量引用
    • 🥃 动态变量绑定
    • 🥗 参数序号引用
    • 🍍 引用对象属性
    • 🥝 调用对象方法
  • 高级特性

    • 🥪 拦截器
    • 🍏 自定义注解
    • 🍇 组合注解
    • 🥑 自定义转换器
  • v1.5.30文档
  • 编程式接口
  • 请求API
公子骏
2022-07-14
目录

🚅 请求头

一个HTTP请求由请求行、请求头、请求体三部分组成。其中,请求头是HTTP请求的重要组成部分,经常用于传递和服务端通讯的控制参数、数据格式、请求编码等重要信息。

请求头由零到多个头属性构成,而一个头属性通常是一个键值对。

# 添加请求头

ForestRequest 对象提供了添加和修改请求头的方法

addHeader(String name, Object value) 添加请求头

  • 参数 name: 请求头名称

  • 参数 value: 请求头的值

// addHeader方法第一个参数为头属性名称,第二个参数为头属性的值
// 添加头属性 Content-Type,值为 application/json
request.addHeader("Content-Type", "application/json");
1
2
3

# 添加多个请求头

一个请求可以添加多个头属性

request.addHeader("Accept", "text/plain")              // 添加第一个头属性
       .addHeader("Content-Type", "application/json")  // 添加第二个头属性
       .addHeader("AccessToken", "foobar");            // 添加第三个头属性

// 最终请求包含以下头属性:
// Accept: text/plain
// Content-Type: application/json
// AccessToken: foobar
1
2
3
4
5
6
7
8

# 添加延迟请求头

延迟请求头参数 (也称作 Lambda 请求头参数),在您需要不马上求值的情况使用。

有很多情况,请求头的参数值不能马上得出,而是在请求发送前的那一刻(所有请求参数都到位时)才能得出,典型的例子就是加签验证的场景

addHeader(String name, Lazy lazyValue) 添加Lazy类型的请求头参数

  • 参数 lazyValue: 延迟求值的Query参数值(即 Lambda)
request.addHeader("name", req -> {
    // req 为请求对象
    // 返回值将作为参数值添加到 URL Query 中
    return "";
});
1
2
3
4
5

在 Lambda 参数中可以调用req.body().encodeToString() 将整个请求体的数据序列化为字符串

request.addHeader("token", req -> Base64.encode(req.body().encodeToString())) // 添加延迟参数
        .addBody("a", 1)
        .addBody("b", 2)
        .addBody("c", 3);
// 最后产生 Header 参数 token: YT0xJmI9MiZjPTM=
1
2
3
4
5

# 修改请求头

修改和覆盖一个已存在的头属性

request.addHeader("User-Agent", "httpclient") // 添加第一个头属性
       .addHeader("User-Agent", "forest");    // 覆盖第一个头属性
// 最终请求包含以下头属性:
// User-Agent: forest
1
2
3
4

# 获取请求头

header(String name) 根据请求头名称获取请求头

  • 参数 name: 请求头名称
  • 返回值: 请求头,ForestHeader 类实例

headers() 获取所有请求头

  • 返回值: 请求头表, ForestHeaderMap 类实例
// 创建新的请求对象
// url: http://localhost/test
ForestRequest<?> request = Forest.get("/")
        .addHeader("Accept", "text/plain")              // 添加第一个头属性
        .addHeader("Content-Type", "application/json")  // 添加第二个头属性
        
// 通过 header 方法可以根据头属性名获取请求头对象
// 并返回 ForestHeader 类的对象        
ForestHeader header1 = request.header("Accept");        // 获取头属性 Accept
ForestHeader header2 = request.header("Content-Type");  // 获取头属性 Content-Type
// 通过 headers 方法可以获取该请求的所有请求头信息
// 并返回 ForestHeaderMap 类对象
ForestHeaderMap headerMap = request.headers();          // 获取请求的所有请求头
// 通过 headerValue 方法可以根据头属性名获取请求头的属性值
// 并返回属性值字符串
String headerValue1 = request.headerValue("Accept");          // 获取头属性 Accept 的属性值
String headerValue2 = request.headerValue("Content-Type");    // 获取头属性 Accept 的属性值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 特殊请求头

Forest为一些特殊头属性定义专有的方法,不用在 addHeader 方法中传入头属性名了,比如: Content-Type

contentType(String contentType) 设置请求头 Content-Type 的值

  • 参数 contentType: 请求头 Content-Type 的值
// 设置头属性 Content-Type 的值为 application/json
request.contentType("application/json");
1
2

Forest也为 Content-Type 常用属性值的设置提供了快捷方法

// 设置头属性 Content-Type: application/x-www-form-urlencoded
request.contentFormUrlEncoded();
// 设置头属性 Content-Type: application/json
request.contentTypeJson();
// 设置头属性 Content-Type: application/xml
request.contentTypeXml();
// 设置头属性 Content-Type: multipart/form-data
request.contentTypeMultipartFormData();
// 设置头属性 Content-Type: application/octet-stream
request.contentTypeOctetStream();
1
2
3
4
5
6
7
8
9
10
帮助我们改善此文档 (opens new window)
上次更新: 2023/03/13, 15:28:40
🧀 URL 参数
🚋 请求体

← 🧀 URL 参数 🚋 请求体→

Theme by Vdoing | Copyright © 2016-2023 公子骏 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式