golang - HTTP客户端总是转义URL

时间:2013-12-30 20:52:09

标签: http go

golang HTTP客户端是否存在,不要转义请求的URL 例如,对URL“/ test(a)”的请求被转义为“/ test%28a%29”。
我正在运行https://github.com/cmpxchg16/gobench

中的代码

3 个答案:

答案 0 :(得分:6)

您可以设置不透明的网址。

假设您希望网址指向您要执行的http://example.com/test(a)

req.NewRequest("GET", "http://example.com/test(a)", nil)
req.URL = &url.URL{
    Scheme: "http",
    Host:   "example.com",
    Opaque: "//example.com/test(a)",
}
client.Do(req)

示例:http://play.golang.org/p/09V67Hbo6H

文档:http://golang.org/pkg/net/url/#URL

答案 1 :(得分:1)

答案 2 :(得分:1)

您需要将Unescaped Path设置为URL路径,将编码路径设置为RawURL,否则它将翻倍,例如。

package main

import (
    "fmt"
    "net/url"
)

func main() {

    doubleEncodedURL := &url.URL{
        Scheme: "http",
        Host:   "example.com",
        Path:   "/id/EbnfwIoiiXbtr6Ec44sfedeEsjrf0RcXkJneYukTXa%2BIFVla4ZdfRiMzfh%2FEGs7f/events",
    }

    rawEncodedURL := &url.URL{
        Scheme:  "http",
        Host:    "example.com",
        Path:    "/id/EbnfwIoiiXbtr6Ec44sfedeEsjrf0RcXkJneYukTXa+IFVla4ZdfRiMzfh/EGs7f/events",
        RawPath: "/id/EbnfwIoiiXbtr6Ec44sfedeEsjrf0RcXkJneYukTXa%2BIFVla4ZdfRiMzfh%2FEGs7f/events",
    }

    fmt.Printf("doubleEncodedURL is : %s\n", doubleEncodedURL)
    fmt.Printf("rawEncodedURL is    : %s\n", rawEncodedURL)

}

游乐场链接:https://play.golang.org/p/rOrVzW8ZJCQ