Go http.NewRequest()解码我的URL输入

Go http.NewRequest()解码我的URL输入,go,Go,当使用http.NewRequest(“GET”,url,nil)处理包含%后跟某个数字的url时,*示例:https://api.deutschebahn.com/freeplan/v1/journeyDetails/356418%252F128592%252F57070%252F90271%252F80%253fstation_evaId%253D8000261)Go将字符串编码为url中的“/”。如何避免这种情况?显式设置URL结构的RawPath字段: req := http.NewRe

当使用
http.NewRequest(“GET”,url,nil)
处理包含%后跟某个数字的url时,*示例:
https://api.deutschebahn.com/freeplan/v1/journeyDetails/356418%252F128592%252F57070%252F90271%252F80%253fstation_evaId%253D8000261
)Go将字符串编码为url中的“/”。如何避免这种情况?

显式设置URL结构的
RawPath
字段:

req := http.NewRequest("GET", "https://api.deutschebahn.com/freeplan/v1/journeyDetails/356418%252F128592%252F57070%252F90271%252F80%253fstation_evaId%253D8000261", nil)
req.URL.RawPath = "/freeplan/v1/journeyDetails/356418%252F128592%252F57070%252F90271%252F80%253fstation_evaId%253D8000261"
此功能适用于此用例:

请注意,路径字段以解码形式存储:/%47%6f%2f变为/Go/。结果是无法区分路径中的哪些斜杠是原始URL中的斜杠,哪些是%2f。这种区别很少重要,但当它重要时,代码不能直接使用Path

Go 1.5引入了RawPath字段来保存路径的编码形式。Parse函数在返回的URL中设置Path和RawPath,如果RawPath是路径的有效编码,则URL的String方法通过调用EscapedPath方法使用RawPath


所以它实际上是URL路径的一部分,包含编码的元素。为什么解码对你来说有问题?你的最终目标是什么?因为请求是这样的:1/journeyDetails/244815/84952/449280/14305/80?station_evaId=8098160获取包含此部分的url字符串244815%2F84952%2F449280%2F143035%2F80%3fstation_evaId%3D8098160不幸的是,这只会给我留下不正确的请求。这让我迅速解决了问题,但是设置Url.RawPath对我不起作用。相反,我使用queryscape(s string)函数来转义url的这一部分。@sparlingwater:虽然这对您的情况可能“有效”,但这不是正确的解决方案;QueryEscape遵循与路径转义不同的规则。至少,您应该使用
PathEscape()
。对于一个合适的解决方案,最好看看您的实际代码,看看您的请求是如何被使用的。