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

时间:2017-06-26 06:35:49

标签: go

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

1 个答案:

答案 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的有效编码)。