使用http.Post将json数据发布到远程服务器

时间:2014-04-15 09:03:50

标签: json go

我对这个看似非常简单的问题感到困惑。

我从客户端收到一个json对象。它看起来像这样:

{
    "user": "test@example.com"
}

我需要简单地将其作为POST请求传递给api的另一部分。这是我迄今为止所得到的:

//Decode incomming json
decoder := json.NewDecoder(r.Body)
var user UserInformation
err := decoder.Decode(&user)

if err != nil {
    log.Println(err)
}

jsonUser, _ := json.Marshal(user)

log.Println(string(jsonUser[:])) //Correct output
buffer := bytes.NewBuffer(jsonUser)
log.Println(string(buffer.Bytes()[:])) //Also correct


resp, err := http.Post("http://example.com/api/has_publisher", "application/json", buffer)
if err != nil {
    log.Println(err)
}

由于我无法在实时系统上测试此程序,因此我使用wireshark验证了结果发布请求,但发现内容缺失且Content-Length为0.出于某种原因,http.Post不会从缓冲区读取。

我在这里遗漏了什么吗?如果有人能指出我正确的方向,我将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

不应该是根本原因,而是替换

buffer := bytes.NewBuffer(jsonUser)

buffer := bytes.NewReader(jsonUser)

您的测试设置更可能是根本原因。我假设你指向一个不存在的端点。这会在发送实际HTTP POST之前导致失败(TCP SYN失败)。

检查您是否可以使用mockable.io替代模拟后端。