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

使用http.Post将json数据发布到远程服务器,json,go,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 !=

我被一个看起来很简单的问题难住了

我正在从客户端接收一个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验证了生成的post请求,结果发现内容丢失,内容长度为0。出于某种原因,http.Post不会从缓冲区中读取

我是不是遗漏了什么?如果有人能给我指出正确的方向,我将不胜感激


谢谢

不应成为根本原因,而应取代

buffer:=bytes.NewBuffer(jsonUser)

buffer:=bytes.NewReader(jsonUser)

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


检查您是否可以将其用作模拟后端的替代方案。

您可以尝试http.Post(“,“application/json”,r.Body)吗?同样的情况也会发生。没有数据。我是说没有任何JSON解码/编码的东西。或者您可以尝试发布到本地主机页并查看结果,而不是wireshark?我尝试使用如下字符串初始化缓冲区:
buffer:=bytes.NewBuffer([]byte(“test”))
,这显然没有什么区别。通过wireshark,我可以很好地看到其他请求,包括内容和所有内容。我在向邮递员提出请求。所以我不认为这会有什么不同…另一个更简单的想法是使用netcat。打开终端,运行nc-l localhost 10000并使用
http.Post(“http://localhost:10000“,“application/json”,buffer)
你明白了。非常感谢你。用nc试过了,得到了正确的结果,所以我一定做对了。我猜我在wireshark看到的是SYN请求?谢谢你的启发!