2017-05-04 130 views
0

我试图使用golang向我的(magento)web服务器发出请求。Golang发布返回json响应

我设法做出一个POST请求,但是,当我从cmd使用CURL时得不到相同的响应。 我跟着这个帖子(How to get JSON response in Golang),它没有给我任何回应。

所以,我想这个

package main 

import (
    "fmt" 
    "net/http" 
    "os" 
) 

var protocol = "http://" 
var baseURL = protocol + "myserver.dev" 

func main() { 

    fmt.Print("Start API Test on: " + baseURL + "\n") 
    r := getCart() 
    fmt.Print(r) 
} 

func getCart() *http.Response { 
    resp, err := http.Post(os.ExpandEnv(baseURL+"/index.php/rest/V1/guest-carts/"), "", nil) 
    if err != nil { 
     fmt.Print(err) 
    } 

    return resp 
} 

这只是返回像

{200 OK 200 HTTP/1.1 1 1 map[Date:[Thu, 04 May 2017 05:30:20 GMT] Content-Type:[application/json; charset=utf-8] Set-Cookie:[PHPSESSID=elklkflekrlfekrlklkl; expires=Thu, 04-May-2017 ... 

的HTTP效应初探当使用curl -g -X POST "my.dev/index.php/rest/V1/guest-carts/"我找回某种ID的,我需要继续进行。 我怎样才能得到golang这个卷曲结果?

+0

什么'卷曲的输出?你确定服务器在JSON中回答请求吗? – Grasshopper

+0

@Grasshopper根据文档(http://devdocs.magento.com/swagger/#/ - > quoteGuestCartManagementV1)respnse是application/json。它生成一个像这样的cart id e746bf2663fd302aebc3d5a8c8443498 – xhallix

回答

3

你需要阅读resp.Body(不要忘记关闭它!),即

func main() { 
    fmt.Print("Start API Test on: " + baseURL + "\n") 
    r := getCart() 
    defer r.Body.Close(); 
    if _, err := io.Copy(os.Stdout, r.Body); err != nil { 
     fmt.Print(err) 
    } 
} 
+0

'r.Body'是一个流,你需要读取它。有了'fmt.Print(r.body)',你只需要打印它的地址。 – ain

+0

是的,谢谢你帮我在这里 – xhallix