在Golang中使用http.Client.Do清空HTTP响应

时间:2017-03-21 14:25:56

标签: http go

我正在使用Go向外部Web服务发出HTTP GET请求。由于某种原因,反应的主体总是空的;内容长度始终为零字节。但是,响应状态代码始终为200,并且对Client.Do的调用不会返回任何错误。该请求需要一个Authorization标头,因此我使用http.NewRequest / http.Client.Do模式提交请求,如下所示。我过去曾做过与此类似的请求,但从未使用过需要标头的GET。这似乎不太可能是原因,但我想知道它是否可能有关系。如果有人能够发现所使用模式的任何潜在问题,或者也许有类似的经历,我真的很感激任何帮助。

谢谢。

if req, err := http.NewRequest("GET", "https://api.molt.in/v1/orders/11111111/items", nil); err != nil {
    return nil, err
} else {
    client := &http.Client{}
    req.Header.Add("Authorization", "secretToken")

    if resp, err := client.Do(req); err != nil {
        return nil, err
    } else {
        defer resp.Body.Close()
        return readBody(resp.Body)
    }
}

1 个答案:

答案 0 :(得分:1)

我终于发现了问题的根源。它与正在提出的请求或收到的响应无关。它与解析响应有关。

我正在使用bufio.NewScanner.Text尝试将响应主体转换为字符串。将此调用替换为ioutil.ReadAll,将输出我最初期望的字符串。

感谢您的所有帮助,并对误导性问题道歉。