我正在尝试使用 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 = 0resp, _ := 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 处理如此简单请求的方式不同吗?
2 回答
手掌心
TA贡献1942条经验 获得超3个赞
该问题与 unicode 相关。%2F
我的命令中有一个(未显示在我的原始问题中)Go 正在转换为/
应该保留为%2F
(cURL 正确地将其保留为%2F
)。更改%2F
以%252F
解决问题。
似乎在创建新的 HTTP 请求时,Go 会将您的 unicode 解析回纯文本,因此如果您%3D
在 URL 中提交给 HTTP 请求初始值设定项,它会将其转换为=
. 我想到了一个显而易见的解决方案将是把%253D
进入的URL,但显然有在围棋中的错误,将转换%3D
到=
,但不%25
至%
。我不得不使用 Opaque URL 请求 ( request.Url.Opaque
) 来解决这个问题。
- 2 回答
- 0 关注
- 1143 浏览
添加回答
举报
0/150
提交
取消