获取正在发送的HTTP请求正文

时间:2014-03-28 04:21:56

标签: http go client httprequest http-get

我正在向基于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

但我不确定传输是否在发送请求之前添加了某些内容,或者实际上是否存在所有内容。

1 个答案:

答案 0 :(得分:0)

我刚看了net / http std lib来源。正如James Henstridge已经回答:可能会添加一些额外的授权和传输相关标头。但这一切都严格遵守协议。所以我不认为那里有什么不妥。

示例底部的代码应该真正打印所有相关信息。现在,这取决于您的请求失败的具体用例。

您是否指定了正确的子域(如错误消息所述)?

您是否设置了Content-Type标头?服务器可能会根据您选择的子域检查相应的Content-Type

这些只是我现阶段可以做出的一些假设。