为了账号安全,请及时绑定邮箱和手机立即绑定

Golang HTTP GET 请求返回 404

Golang HTTP GET 请求返回 404

Go
慕尼黑的夜晚无繁华 2021-06-01 13:43:34
我正在尝试使用 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) 来解决这个问题。


查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 1143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信