我正在以以下方式从外部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响应?
ioutil.ReadAll
读取字节后,添加log.Println(string(body))
来查看它是否是有效的 JSON。 - mkoprivahttp.Get
获取响应后,设置响应头对于读取响应正文没有任何影响。您可以省略该行代码。 - mkoprivareq.Header.Set("name", "value")
来实现。 - Dhanush Gopinath<
符号,这让我相信您收到的是HTML/XML 响应(而不是JSON)。请创建一个请求,将Accept
头部设置为application/json
,并确保正确调用 API。 - Elias Van Ootegem