对包含%后跟某个数字的网址使用http.NewRequest("GET", url , nil)
时,*示例:https://api.deutschebahn.com/freeplan/v1/journeyDetails/356418%252F128592%252F57070%252F90271%252F80%253fstation_evaId%253D8000261
)Go会将字符串编码为网址中的“/”。我怎么能避免这种情况?
答案 0 :(得分:0)
明确设置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"
对于此用例,此功能为documented:
请注意,Path字段以解码形式存储:/%47%6f%2f变为/ Go /。结果是,无法分辨Path中哪些斜杠是原始URL中的斜杠,哪些是%2f。这种区别很少很重要,但是当它出现时,代码不能直接使用Path。
Go 1.5引入了RawPath字段来保存Path的编码形式。 Parse函数在它返回的URL中设置Path和RawPath,并且URL的String方法通过调用EscapedPath方法使用RawPath(如果它是Path的有效编码)。