Golang Go语言中收到get请求后是怎么处理%这样的参数

发布于 1周前 作者 ionicwang 来自 Go语言
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 都存在这样的问题


Golang Go语言中收到get请求后是怎么处理%这样的参数

更多关于Golang Go语言中收到get请求后是怎么处理%这样的参数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

14 回复

请求的时候%手动编码掉
http://127.0.0.1:2020/cs?&b=222&c=%99

更多关于Golang Go语言中收到get请求后是怎么处理%这样的参数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


前端改不了的情况下, 后面能有啥办法解决吗

出现这种问题的原因就是客户端没有做一次编码,导致后端拿到%99 的值被认为是编码后的值
uelencode 这种数据格式就是要求客户端一次编码 服务端一次解码,改框架不知道怎么改,除非你原生地取出 http 中的 body 自己解析

标准库的就是这么按照标准处理的,跟框架没什么关系,除非不用标准库实现。

当然确实可以不用。你如果真的有需求,可以使用 RawQuery 获取原始字符串,自己手工处理一下就好。

RawQuery 怎么用才能获取原始字符串, 用的 beego 里面带的是处理后的, 能否贴一部分代码我试一下

RawQuery 怎么用才能获取原始字符串, 用的 beego 里面带的是处理后的, 能否贴一部分代码我试一下

gin 里没这个问题啊,你成功浪费了我 5 分钟。encoded query: c=%99

你用什么发的请求啊! 我刚试了, 不行啊

我来破案:

%EF%BF%BD

U+FFFD 这个字符
也就是



喜闻乐见

补一张图:

不够直白,再补一张






你的 %99 根本就还没出框架就被换成问号了,还搁这 %99 呢

谢谢解惑了, 难怪怎么调都不对

ctx.Request.RawQuery

在Golang中处理GET请求时,如果URL中包含像%这样的百分号编码字符,Go的net/http包会自动处理URL解码,将百分号编码的参数转换为其原始形式。这通常在处理查询参数(query parameters)时发生。

当你收到一个GET请求时,URL中的查询字符串(即?后面的部分)会被解析成一个map[string][]string类型的值,其中键是参数名,值是该参数对应的所有值的切片。这个解析过程包括URL解码,所以像%20这样的空格编码会被转换为空格字符。

例如,如果你有一个URL http://example.com/?name=John%20Doe&age=30,在Go的服务器端代码中,你可以通过r.URL.Query()方法获取查询参数,其中name的值将是[]string{"John Doe"}age的值将是[]string{"30"}

处理这些参数时,你通常不需要担心百分号编码,因为net/http包已经为你处理了这些细节。但是,如果你需要在应用程序的其他部分手动进行URL编码或解码,可以使用net/url包中的QueryEscapeQueryUnescape函数。

总的来说,在Golang中处理GET请求的百分号编码参数是非常直接和简单的,因为标准库已经为你处理了URL解码的复杂性。

回到顶部