为了账号安全,请及时绑定邮箱和手机立即绑定

使用 HTTP 协议和 golang 列出 OrientDb 数据库

使用 HTTP 协议和 golang 列出 OrientDb 数据库

Go
千巷猫影 2021-10-11 13:46:37
我正在尝试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表示包含正文,否则它只会显示状态和标题)


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信