json - 在 JSON get 请求中设置 header

标签 json go

我通过以下方式从外部 API 获取 JSON 响应:

func Request(url string, contentType string) []byte {
    resp, err := http.Get(url)
    resp.Header.Set("Content-Type", contentType)
    if err != nil {
        log.Fatal(err)
    }

    body, err := ioutil.ReadAll(resp.Body)
    resp.Body.Close()
    if err != nil {
        log.Fatal(err)
    }

    return body
}

url := fmt.Sprintf("https://example.com/api/category/%s", category)
contentType := "application/json"
body := Request(url, contentType)

res := &JSONRespStruct{}
err := json.Unmarshal([]byte(body), res)
if err != nil {
    log.Fatal(err)
}

问题是如果我开始使用 go-wrk 对我的站点进行基准测试,服务器会崩溃并显示以下错误消息:

2018/01/02 12:13:35 invalid character '<' looking for beginning of value

我认为代码尝试将 JSON 响应解析为 HTML。如何强制获取 JSON 格式的响应?

最佳答案

您可能想在请求中设置 header 。在响应中设置 header 没有影响。

func Request(url string, contentType string) []byte {
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }
    req.Header.Set("Content-Type", contentType)
    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    return body
}

关于json - 在 JSON get 请求中设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060080/

相关文章:

go - 对 golang 项目布局 repo 在实践中的工作方式感到困惑

go - elogrus 未找到事件连接

c++ - 当 header 中指定文本/纯文本时,eBay API 返回 JSON

java - 使用 IntelliJ REST 客户端测试 Spring MVC POST 会导致 415

javascript - 在 json 数组中使用变量作为标识符

sorting - 如何对 map 进行反向排序并将其发送到go lang中的模型

python - 将 JSON 发送到 Flask,request.args 与 request.form

javascript - Ajax 请求当前路径请求 `text/html` 而不是 `application/json`

firebase - 在 App Engine 标准 Golang 中初始化 Firebase Admin

go 函数 - panic : runtime error: invalid memory address or nil pointer dereference