golang 收到 get 请求后是怎么处理%这样的参数

2022-04-06 17:58:12 +08:00
 xpyusrs
http://127.0.0.1:2020/cs?&b=222&c=%99

请求参数是这样, 收到后在 golang 里面打印出来是

/cs?a=101&b=222&c=%EF%BF%BD

url 编码也不是很对, %的 url 编码应该是%25, 然后导致解析c的值变成了乱码

我现在想把%当成普通字符串处理, 我要怎么做, gin 和 beego 都存在这样的问题

2308 次点击
所在节点    Go 编程语言
13 条回复
jxxz
2022-04-06 18:06:53 +08:00
请求的时候%手动编码掉
http://127.0.0.1:2020/cs?&b=222&c=%2599
xpyusrs
2022-04-06 18:09:50 +08:00
@jxxz 前端改不了的情况下, 后面能有啥办法解决吗
jxxz
2022-04-06 18:16:12 +08:00
出现这种问题的原因就是客户端没有做一次编码,导致后端拿到%99 的值被认为是编码后的值
uelencode 这种数据格式就是要求客户端一次编码 服务端一次解码,改框架不知道怎么改,除非你原生地取出 http 中的 body 自己解析
janxin
2022-04-06 18:26:34 +08:00
标准库的就是这么按照标准处理的,跟框架没什么关系,除非不用标准库实现。

当然确实可以不用。你如果真的有需求,可以使用 RawQuery 获取原始字符串,自己手工处理一下就好。
xpyusrs
2022-04-06 18:38:48 +08:00
RawQuery 怎么用才能获取原始字符串, 用的 beego 里面带的是处理后的, 能否贴一部分代码我试一下
xpyusrs
2022-04-06 18:39:23 +08:00
@janxin RawQuery 怎么用才能获取原始字符串, 用的 beego 里面带的是处理后的, 能否贴一部分代码我试一下
dcalsky
2022-04-06 18:59:05 +08:00
gin 里没这个问题啊,你成功浪费了我 5 分钟。encoded query: c=%99
xpyusrs
2022-04-06 19:03:17 +08:00
@dcalsky 你用什么发的请求啊! 我刚试了, 不行啊
GeruzoniAnsasu
2022-04-06 19:10:11 +08:00
我来破案:

%EF%BF%BD

U+FFFD 这个字符
也就是



喜闻乐见
GeruzoniAnsasu
2022-04-06 19:12:05 +08:00
补一张图:

GeruzoniAnsasu
2022-04-06 19:18:41 +08:00
不够直白,再补一张






你的 %99 根本就还没出框架就被换成问号了,还搁这 %99 呢
xpyusrs
2022-04-06 20:33:49 +08:00
@GeruzoniAnsasu 谢谢解惑了, 难怪怎么调都不对
janxin
2022-04-06 22:33:40 +08:00
@xpyusrs ctx.Request.RawQuery

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/845309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX