猿问

Golang HTTP GET 请求返回 404

我正在尝试使用 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 处理如此简单请求的方式不同吗?


慕尼黑的夜晚无繁华
浏览 1144回答 2
2回答

手掌心

该问题与 unicode 相关。%2F我的命令中有一个(未显示在我的原始问题中)Go 正在转换为/应该保留为%2F(cURL 正确地将其保留为%2F)。更改%2F以%252F解决问题。似乎在创建新的 HTTP 请求时,Go 会将您的 unicode 解析回纯文本,因此如果您%3D在 URL 中提交给 HTTP 请求初始值设定项,它会将其转换为=. 我想到了一个显而易见的解决方案将是把%253D进入的URL,但显然有在围棋中的错误,将转换%3D到=,但不%25至%。我不得不使用 Opaque URL 请求 ( request.Url.Opaque) 来解决这个问题。
随时随地看视频慕课网APP

相关分类

Go
我要回答