go - 为什么我的 GoLang POST 请求没有填充数据?

标签 go

func forwarderHandlerFunc(w http.ResponseWriter, r *http.Request) {
    client := &http.Client{}
    u, _ := url.Parse(r.RequestURI)
    req, _ := http.NewRequest(r.Method, fmt.Sprintf("%s%s", apiUrl, u.Path), r.Body)
    fmt.Printf(fmt.Sprintf("%s\n", nutils.ReaderToString(req.Body)))
    resp, _ := client.Do(req)
    resp.Write(w)
}

我正在尝试将传入的 HTTP 请求转发到另一个端点,同时将正文(包括 POST/PUT 表单数据)复制到新请求中。

但是,它似乎不起作用,即使 Body 似乎打印出正确的数据。

打印输出为:

email=meh%!g(MISSING)mail.com

我该如何解决?


编辑:添加了更多调试信息,这次打印出 resp 的输出

func forwarderHandlerFunc(w http.ResponseWriter, r *http.Request) {
    client := &http.Client{}
    u, _ := url.Parse(r.RequestURI)

    req, _ := http.NewRequest(r.Method, fmt.Sprintf("%s%s", apiUrl, u.Path), r.Body)
    fmt.Printf(fmt.Sprintf("%s\n", nutils.ReaderToString(req.Body)))

    resp, _ := client.Do(req)
    b,_ := ioutil.ReadAll(resp.Body)
    fmt.Printf(fmt.Sprintf("%s\n", nutils.BytesToString(b)))

    resp.Write(w)
}
$ go install && gom-proxy-forwarder run --listen localhost:5002 --api-url http://localhost:5001
email=meh2%!g(MISSING)mail.com
{
  "email": null
}

它不应该为空。应该是 meh@gmail.com

最佳答案

明白了。问题是我在 Python 的 Flask 服务器中的端点不支持 Go 的 Request 坚持的分块编码。

当我像 req.ContentLength = 25 那样手动指定 ContentLength 时,它起作用了。

经验教训:问题可能并不总是出在您的 Go 代码上。

关于go - 为什么我的 GoLang POST 请求没有填充数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30339877/

相关文章:

go - 超时同时等待两个结果

tcp - 不同 Goroutine 中的 ZeroMQ 上下文如何通信?

linux - golang udp 连接在每次写入时都被拒绝

go - Go 中的转义反引号(exec.Command 中使用的字符串)

go - 在 Go 反向代理中在 handleFunc 和 modifyResponse 之间共享上下文

mongodb - 我如何使用 mgo 和 Golang 编写以下 Mongo 聚合查询

go - 在 golang 中使用 bitsets 来表示能力

email - 使用 GOLANG 从电子邮件文件中提取附件

go - 创建一个具体类型的 slice 并转换到其各自的接口(interface)

go - 初始化 map 的更好方法是什么?