我对这个看似非常简单的问题感到困惑。
我从客户端收到一个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不会从缓冲区读取。
我在这里遗漏了什么吗?如果有人能指出我正确的方向,我将不胜感激。
谢谢!
答案 0 :(得分:2)
不应该是根本原因,而是替换
buffer := bytes.NewBuffer(jsonUser)
带
buffer := bytes.NewReader(jsonUser)
您的测试设置更可能是根本原因。我假设你指向一个不存在的端点。这会在发送实际HTTP POST之前导致失败(TCP SYN失败)。
检查您是否可以使用mockable.io替代模拟后端。