我正在向基于https的API发出请求。
在Chrome中输入请求网址时,一切正常。在使用Go中的net/http
包执行相同请求时,我收到有关丢失子域的错误:
"error": {
"type": "ApiUnknown",
"message": "No api specified (via subdomain)"
}
我认为Chrome和Go会以某种方式发送稍微不同的http请求,所以,我需要知道这些差异可能是什么。
在Chrome中,我可以使用开发人员工具查看已发送的请求。
如何从http
包中发送HTTP请求正文?
我可以做以下事情:
package main
import (
"net/http"
"os"
)
func main() {
urlStr := "https://api-name.subdomain.domain.org/page?param=value"
//client := &http.Client{}
req, err := http.NewRequest("GET", urlStr, nil)
if err != nil {
panic(err)
}
req.Write(os.Stdout) // Will this output be equal to the one being sent to the server?
//resp, err := client.Do(req)
}
输出:
GET / page?param = value HTTP / 1.1
主持人:api-name.subdomain.domain.org
User-Agent:转1.1包http
游乐场: http://play.golang.org/p/Oku0O1yiBt
但我不确定传输是否在发送请求之前添加了某些内容,或者实际上是否存在所有内容。
答案 0 :(得分:0)
我刚看了net / http std lib来源。正如James Henstridge已经回答:可能会添加一些额外的授权和传输相关标头。但这一切都严格遵守协议。所以我不认为那里有什么不妥。
示例底部的代码应该真正打印所有相关信息。现在,这取决于您的请求失败的具体用例。
您是否指定了正确的子域(如错误消息所述)?
您是否设置了Content-Type
标头?服务器可能会根据您选择的子域检查相应的Content-Type
。
这些只是我现阶段可以做出的一些假设。