我通过以下方式从外部 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/