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

我正在尝试OrientDb使用 HTTP 协议获取数据库列表。但是我无法获得预期的响应,而我可以在浏览器中获得响应。


如果我在浏览器地址行中输入,http://localhost:2480/listDatabases那么我有响应:


{"@type":"d","@version":0,"databases":["MaximDB","GratefulDeadConcerts"],"@fieldTypes":"databases=e"}

我怎样才能得到同样的使用golang?


我的代码:


package main


import (

    "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

}


千巷猫影
浏览 145回答 1
1回答

蝴蝶刀刀

您的请求很好,这是您尝试打印出响应的方式。您正在将整个响应对象编组为 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表示包含正文,否则它只会显示状态和标题)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go