我试图使用BasicAuth执行一个简单的HTTP get请求。问题是响应一直返回"404",即使我将URL复制并粘贴到命令行cURL请求中,它也可以正常工作:
const url string = "http://1.2.3.4:6710/REST/command"
const username string = "..."
const password string = "..."
fmt.Printf("\n%v\n", url)
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
req.SetBasicAuth(username, password)
req.Proto = "HTTP/1.0"
req.ProtoMinor = 0
resp, _ := client.Do(req)
fmt.Printf("\n%v\n", resp)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Printf("\n%v\n\n", string(body))
所以你可以看到,我立即打印出我的
url
- 这是同一行文本,如果我将其复制到命令行cURL请求中,所有操作都可以正常进行。我的请求响应如下:
&{404 Not Found 404 HTTP/1.0 1 0 map[Pragma:[no-cache] Date:[Wed, 17 Apr 2013 15:01:33 GMT] Connection:[close] Server:[MoneyWorks_Datacentre/6.1.3 Win-x86 REST/6.1.3] Cache-Control:[no-store, no-cache, must-revalidate] Expires:[Wed, 17 Apr 2013 15:01:33 GMT]] 0xf8400e3920 -1 [] true map[] 0xf8400aa000}
是否有任何与golang的HTTP函数不同的独特之处,使其与cURL处理这样一个简单请求的方式不同?编辑:通过将URL传递给
exec.Command("curl", url).Output()
,我已经让它工作了。显然,这不是我希望得到的本地解决方案,但现在它能用了。
http.Client
,curl
, 或nc
中的任何一个)直到能够轻易地使其中之一的行为发生改变。然后寻找如何在Go语言中更改该行为。 - Scott Lamb