0

0

详解Java中的HttpRequest.Builder_流式API构建复杂HTTP请求头

P粉602998670

P粉602998670

发布时间:2026-02-23 11:26:02

|

975人浏览过

|

来源于php中文网

原创

header() 追加同名请求头,setheader() 覆盖同名请求头;java 17+ 新增 setheader(),java 11 不支持;body 字符串需显式指定 utf-8 编码,content-type 必须与 bodypublisher 类型匹配;cookie 需手动设置或配合 cookiehandler 管理;builder 不可变,每次调用返回新实例,build() 仅能调用一次。

详解java中的httprequest.builder_流式api构建复杂http请求头

HttpRequest.Builder 设置自定义请求头时,header() 和 setHeader() 有啥区别?

header() 是追加模式,同名头可以多次调用,最终会以多个相同字段出现在请求中(HTTP/1.1 允许);setHeader() 是覆盖模式,后调用的会完全替换前一次对同一名称的设置。实际开发中容易误用 header() 导致重复头,比如两次 header("Authorization", "Bearer a"),服务端可能只取第一个或直接拒收。

  • 如果需要确保唯一性(如 Content-TypeAccept),优先用 setHeader()
  • 如果目标服务明确要求多值头(如 Cookie 或自定义追踪头 X-Request-ID),才用 header()
  • 注意:Java 11 的 HttpRequest.Builder 没有 setHeader() —— 这是 Java 17+ 新增方法,低版本只能靠先 build() 再手动构造,或用第三方库兜底

构建带认证和 JSON Body 的 POST 请求,Body 和 Header 怎么配才不翻车?

HttpRequest.newBuilder() 要求 BodyPublisher 必须与 Content-Type 头一致,否则多数 REST 服务会返回 415 Unsupported Media Type。常见错误是写了 setHeader("Content-Type", "application/json"),但 Body 用的是 HttpRequest.BodyPublishers.ofString("...") 而没做 UTF-8 编码声明,导致中文乱码或解析失败。

  • Body 字符串必须显式指定编码:HttpRequest.BodyPublishers.ofString(json, StandardCharsets.UTF_8)
  • 不要手动拼接 JSON 字符串,避免引号/转义出错;建议用 Jackson/Gson 序列化后传入
  • Content-Length 头由 JDK 自动计算并添加,别自己设,否则可能冲突导致连接被重置
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/v1/users"))
    .header("Authorization", "Bearer xyz")
    .setHeader("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("{\"name\":\"张三\"}", StandardCharsets.UTF_8))
    .build();

用 HttpRequest.Builder 发送含 Cookie 的请求,为什么服务端收不到?

JDK 的 HttpClient 默认不自动管理 Cookie,HttpRequest.Builder 更不会读取或写入 Cookie 头——它只是个构造器,不维护状态。你写的 header("Cookie", "sid=abc") 会被发出去,但后续重定向或重试时不会自动带上,也不会从响应里提取新 Cookie 并回填。

讯飞听见会议
讯飞听见会议

科大讯飞推出的AI智能会议系统

下载
  • 若需完整 Cookie 管理,必须配合 HttpClient.newBuilder().cookieHandler(...) 使用 CookieManager
  • 单次请求硬编码 Cookie 头没问题,但要注意有效期和作用域(PathDomain
  • 常见坑:把 Set-Cookie 响应头里的值原样当请求头用,漏掉 Expires/Max-Age 判断,结果发了个已过期的 Cookie

流式构建时链式调用中断,Builder 状态会不会残留?

不会。HttpRequest.Builder 是不可变对象,每次调用 header()GET()POST(...) 都返回一个新 Builder 实例,原始实例不受影响。但这也意味着:如果中间某步抛异常(比如 URI 解析失败),前面设好的头、method、body 都白写了,没法“回滚”。

立即学习Java免费学习笔记(深入)”;

  • 别在链式调用中途插逻辑判断,容易断链;建议分步构建,用变量暂存 Builder
  • 所有 setter 类方法(timeout()version())都遵循同样不可变规则,没有副作用
  • 一个易忽略点:build() 只能调用一次,重复调用会抛 IllegalStateException,不是因为状态残留,而是 Builder 内部标记了“已构建”

事情说清了就结束

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

445

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

322

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6476

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

363

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

437

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.8万人学习

C# 教程
C# 教程

共94课时 | 10万人学习

Java 教程
Java 教程

共578课时 | 70.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号