Golang 中 url.Values.Encode() 引发的问题

圣斗士皮皮 · · 1910 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

缘起是一个http签名方法,客户端对 http 的参数签名,然后服务器验证签名。然后突然测试出当提交的内容中含有空格时,服务器就验签失败。

查询了客户端签名的过程数据,然后和服务器的验签步骤查看了下,居然是客户端在签名前数据中的空格被格式化为了 "%20", 而 golang 服务器是用 url.Values.Encode() 方法导致空格变成了 "+" 号。

问题就是这儿了, 空格无论是哪种 escape, 似乎都有标准可依。两个标准,难分对错。而且golang 还提供了两种 escape 标准实现方法:

  • PathEscape: 空格会转为 %20
  • QueryEscape: 空格会转为 +

而 url.Values.Encode() 内部使用的就是 QueryEscape() 方法,所以最终解决方案是在 url.Encode() 后对 + 替换为 %w0:

strings.Replace(url.Values.Encode(), "+", "%20", -1)

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:圣斗士皮皮

查看原文:Golang 中 url.Values.Encode() 引发的问题

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1910 次点击  
加入收藏 微博
1 回复  |  直到 2021-07-22 16:58:24
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传