我通过以下方式从外部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?
答案 0 :(得分:3)
您可能希望在请求中设置标头。在响应上设置标题没有任何影响。
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
}