我正在尝试OrientDb使用 HTTP 协议获取数据库列表。但是我无法获得预期的响应,而我可以在浏览器中获得响应。如果我在浏览器地址行中输入,http://localhost:2480/listDatabases那么我有响应:{"@type":"d","@version":0,"databases":["MaximDB","GratefulDeadConcerts"],"@fieldTypes":"databases=e"}我怎样才能得到同样的使用golang?我的代码:package mainimport ( "encoding/json" "fmt" "net/http")func main() { client := &http.Client{} req, err := http.NewRequest("GET", "http://localhost:2480/listDatabases", nil) req.SetBasicAuth("root", "1") resp, err := client.Do(req) if err != nil { fmt.Printf("Error : %s", err) } fmt.Println("resp") fmt.Println(ToJson(resp))}func ToJson(obj interface{}) string { b, err := json.MarshalIndent(&obj, "", " ") if err != nil { fmt.Printf("Error : %s", err) } strJson := string(b) return strJson}
1 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
您的请求很好,这是您尝试打印出响应的方式。
您正在将整个响应对象编组为 JSON,并且您可以看到"Body": {},您的身体丢失的位置。A*http.Response不会按照您想要的方式编组到 JSON。这是因为该Body字段不仅仅是 a stringor []bytes,它还是 anio.ReadCloser并且 JSON 封送处理代码不会调用.Read它。
尝试其中之一以获取响应正文
var b bytes.Buffer
_, err = b.ReadFrom(resp.Body)
if err != nil {
log.Fatal("Error : %s", err)
}
fmt.Println(b.String())
或者
contents, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal("Error : %s", err)
}
fmt.Println(string(contents))
或者要获得额外的响应元信息,您可以这样做
dump, err := httputil.DumpResponse(resp, true)
if err != nil {
log.Fatal("Error : %s", err)
}
fmt.Println(string(dump))
(第二个标志true表示包含正文,否则它只会显示状态和标题)
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报
0/150
提交
取消