golang 中http请求时 header头字段首字母自动大写问题

2023-10-27

  • 当使用http请求,设置header头, 使用的方法: req.Header.Set(k, v) 发现请求过程中 k的首字母自动变为了大写,查看下发现使用了 CanonicalMIMEHeaderKey 这个函数 , 自动将首字母转化了
// CanonicalMIMEHeaderKey returns the canonical format of the
// MIME header key s. The canonicalization converts the first
// letter and any letter following a hyphen to upper case;
// the rest are converted to lowercase. For example, the
// canonical key for "accept-encoding" is "Accept-Encoding".
// MIME header keys are assumed to be ASCII only.
// If s contains a space or invalid header field bytes, it is
// returned without modifications.
func CanonicalMIMEHeaderKey(s string) string {
	commonHeaderOnce.Do(initCommonHeader)

	// Quick check for canonical encoding.
	upper := true
	for i := 0; i < len(s); i++ {
		c := s[i]
		if !validHeaderFieldByte(c) {
			return s
		}
		if upper && 'a' <= c && c <= 'z' {
			return canonicalMIMEHeaderKey([]byte(s))
		}
		if !upper && 'A' <= c && c <= 'Z' {
			return canonicalMIMEHeaderKey([]byte(s))
		}
		upper = c == '-'
	}
	return s
}
  • header 结构
	type Header map[string][]string

可以直接用map的方式写入:

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

golang 中http请求时 header头字段首字母自动大写问题 的相关文章

  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 如何在 Goji (Golang) 中使用不同的中间件创建单独的路由组?

    我正在使用Goji https github com zenazn goji https github com zenazn goji 并希望定义具有自己的中间件的路由组 例如 下面的所有路径 company应使用 LDAP 身份验证并定义
  • 是否支持动态变量?

    我想知道Go中是否可以动态创建变量 我在下面提供了一个伪代码来说明我的意思 我将新创建的变量存储在切片中 func method slice make type for i 0 i lt 10 i var variable i i slic
  • Golang 基础知识 struct 和 new() 关键字

    我正在学习 golang 当我阅读描述结构的章节时 我遇到了初始化结构的不同方法 p1 passport var p2 passport p3 passport Photo make byte 0 0 Name Scott Surname
  • 我可以根据我正在构建的操作系统导入 Golang 包吗?

    假设我有一个基于哪个操作系统的 go 项目 在某些情况下是哪个发行版 我想使用 Systemd 客户端包 Upstart 客户端包 sysv 客户端包 launchd 客户端包 是否可以有选择地导入每个包 以便我只导入我正在构建的每个操作系
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • (转)如何使用toml文件?

    正如标题 我想知道如何使用 golang 中的 toml 文件 在此之前 我展示了我的 toml 示例 这样对吗 datatitle enable true userids 12345 67890 datatitle 12345 prop1
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • 根据值匹配数组

    我使用以下代码来解析 yaml 并应得到输出为runners对象和函数build应更改数据结构并根据以下结构提供输出 type Exec struct NameVal string Executer string 这是我尝试过的 但我不知道
  • 如何在 Go 中从 stdin 解析无限 json 数组?

    我正在尝试编写一个 i3status 的小替代品 一个与 i3bar 兼容的小程序进行通信this http i3wm org docs i3bar protocol html协议 他们通过标准输入和标准输出交换消息 两个方向的流都是一个无
  • Go 编程语言中的“方法需要指针接收器”

    我刚刚看到了 Go 编程语言的演示 并想尝试写几行 一切工作正常 直到我尝试在这种情况下使用界面 我该如何解决这个问题 package main import fmt type entity float32 func e entity in
  • benchmem 的输出

    使用内存分析器运行基准测试时 我看到以下输出 SomeFunc 100 17768876 ns op 111 B op 0 allocs op 我不明白输出 0 allocs op 但分配了 111 B 知道这意味着什么吗 我的函数是否在堆
  • 使用 StructScan 将 postgresql 数组获取到结构中

    测试数据 CREATE TABLE test id int data text INSERT INTO test id data VALUES 1 a b c 去代码吧 第一个 一个运行良好的 func main db sqlx Open
  • Golang HTTP Post 错误:连接被拒绝

    我正在尝试向正在运行 PHP 应用程序的端口 8080 上的本地主机发送 post 请求 卷曲效果很好 curl data key asdf http localhost 8080 但在 Go 中我收到以下错误 Post http loca
  • golang中的Reader接口和Read方法

    我正在关注 golang 之旅 我被要求 实现一个 rot13Reader 它实现 io Reader 并从 io Reader 读取 通过将 ROT13 替换密码应用于所有字母字符来修改流 我首先将方法实现到 rot13Reader ty
  • http:多余的response.WriteHeader调用

    我有一个HandleFunc 如果成功的话 我希望 显然 能够 sent a 200回复 在回复中写一条信息性消息 但是以下代码片段 在快乐路径中执行 if fullRun w Write byte successMsg w WriteHe
  • 将参数传递给 http.HandlerFunc

    我正在使用 Go 的内置 http 服务器pat http github com bmizerany pat响应某些 URL mux Get products http HandlerFunc index func index w http
  • 如何从 gorm 中的模型获取表名?

    是否可以获得模型的表名 我发现可以从模型结构但我不知道如何正确地做到这一点 我没有找到该结构的任何初始化 user User tableName db 对于 Gorm v2 根据https github com go gorm gorm i
  • 使用结构解析 YAML

    我创建了以下 YAML 文件来提供用户需要提供的一些配置 Environments sys1 models app type app1 service type fds app type app2 service type era sys2

随机推荐

  • 【Transformer】11、DPT: Vision Transformer for Dense Prediction

    文章目录 一 背景和动机 二 方法 2 1 Transformer encoder 2 2 Convolutional decoder 2 3 处理不同输入大小 三 效果 3 1 单目深度估计 3 2 语义分割 论文链接 https arx
  • idea启动报错Internal error. Please refer to https://jb.gg/ide/critical-startup-errors java.util.concurr

    idea启动报错Internal error Please refer to https jb gg ide critical startup errors java util concurrent CompletionException
  • SVN版本库的迁移

    SVN版本库的迁移 SVN版本库的迁移 BaoYaEr BlogJava SVN版本库的迁移 版本控制之类 SVN版本库的迁移 1 业务需求 经过前面的SVN搭建 权限配置和强制写日志的工作之后 今天的任务是把原来其它分散的各个版本库统一迁
  • cmake文档中文翻译-add_compile_options

    为什么80 的码农都做不了架构师 gt gt gt 向源码文件的编译过程增加编译选项 add compile options
  • BUG已解决:ModuleNotFoundError: No module named ‘torchtext.legacy‘

    from torchtext legacy data import Field BucketIterator from torchtext legacy datasets translation import Multi30k 当执行上诉语
  • cublas cudnn优化笔记

    文章目录 前言 cublas 常用API 数据格式 cublasGemmEx cublasLtMatmul cuDNN 常用API cudnnConvolutionForward 前言 cublas 官方指南 https docs nvid
  • 获取一个字符串中指定子串出现的次数

    方法一 indexof str i 在调用的字符串中 从i开始查询 str出现的索引位置 没有返回 1 有返回索引位置 String string hanbasdnbafllgnbahjnbakqqqqlnbaxi String str n
  • NLP系列 5. 朴素贝叶斯、SVM、LDA主题模型

    朴素贝叶斯 贝叶斯公式 概率统计中学过了贝叶斯定理的数学表示 P A B P
  • ubuntu下最简单的方式安装Qt及QtCreator

    命令行安装 sudo apt get install qt5 default qtcreator
  • 什么格式的wav文件最小?

    经测试 用Adobe Audition 3 0保存为wav文件时 用 微软 ADPCM wav 保存的文件最小 很适合网面用音频文件的处理 噢 我这里只是用来做提示用户的提示音 如果你有其它用途要保持音质则另当别论
  • A Practical Guide to Quantitative Finance Interviews

    Brain Teasers 问题 海盗分金问题 大于等于一半算作通过版本 老虎和羊问题 100只老虎一只羊 只能一只老虎吃一只羊 吃完羊就变成老虎了 问羊会不会被吃 过河问题 4个人过河 只有一个手电 过河必须用手电 最多两个人同时过河 速
  • 几个问题的总结

    1 PHYSX如何设置模型的质心 2 履带转圈问题 还需要几何运算么 3 为何关闭后 有时会中断到 material这个部分 4 如何将shadowmap和hdr相互结合 这几天需要干的事情 1 volume light 2 pccs 3
  • Unity 物理引擎之铰链关节(Hinge Joint)

    关节分类 铰链关节 Hinge Joint 下面举个例子 创建一个小球 选中小球添加铰链关节如下所示 此时运行 因为这条箭头朝向X轴 所以会围绕X轴转动 介绍Sphere上的Hinge Joint 的属性以及应用 新建的Cube的设置 添加
  • 完整兼职项目——2500块接的外包Python项目

    这次给大家带来的是一个2500的爬虫外包项目 在这里肯定有人说这个不值这么多 也有人会各种嘲讽 但是别忘了 人的眼界不一样 做事的决定自然会不同 如果2500能给你带来25000的利润 那么你会选择毫不犹豫的支付吗 话不多说 看聊天记录 还
  • Wonder Workshop:全球教育机器人产业格局初变

    转自 http www techweb com cn news 2016 02 23 2282671 shtml 导语 目前 全球教育机器人细分市场中 一批新兴的企业正在冲击着乐高 一家独大 的市场地位 整个市场也开始呈现出两大市场分支 一
  • 管理就是最大程度发挥别人的善意

    管理就是最大程度发挥别人的善意 前置条件 人人生来平等 人是自由的 人的潜力是无法衡量的 步骤 新员工从入职 招聘创意精英 为员工设立期望值 需要跟新员工沟通想在公司里工作多久 想在期间内达到什么成就 给员工讨论想达到预期成就需要哪些能力
  • 【多模态】13、Vision-Language 模型在视觉任务中的调研

    文章目录 一 简介 二 基础知识 2 1 视觉任务的训练策略 2 2 VLM 基础 2 2 1 网络结构 2 2 2 预训练目标函数 2 2 3 评估和下游任务 2 3 数据集 三 迁移学习 3 1 使用 prompt tuning 实现迁
  • 从零开发区块链应用(八)--结构体初识

    文章目录 一 结构体定义 二 初始化结构体 三 结构体的访问 四 结构体指针 五 结构体可见性 六 结构体标签 七 结构体嵌套 八 结构体方法 九 结构体特性 Go语言中提供了对struct的支持 struct 中文翻译称为结构体 与数组一
  • js运算符之一元运算符

    一元运算符 var a 2 a 它就等价于a a 1 先返回结果后运算 上面的语句块就可以写成下面的语句块 它们是等价的 var a 2 a a 1 同理 a 就相当于 a a 1 也是先运算后返回结果 注意 无论是 a a 还是 a a
  • golang 中http请求时 header头字段首字母自动大写问题

    当使用http请求 设置header头 使用的方法 req Header Set k v 发现请求过程中 k的首字母自动变为了大写 查看下发现使用了 CanonicalMIMEHeaderKey 这个函数 自动将首字母转化了 Canonic