我正在尝试做一个GET
请求,然后将我得到的内容发送到POST
请求中的另一个站点。下面的代码工作正常:发送两个功能之间的`阅读器'
func deliver(sourceURL *url.URL, destinationURL *url.URL) {
client := &http.Client{}
sourceResponse, err := http.Get(sourceURL.String())
if err == nil {
body, _ := ioutil.ReadAll(sourceResponse.Body)
client.Post(destinationURL.String(), "text/html", strings.NewReader(string(body)))
}
}
但是这将整个响应读入内存 - 如何将响应流式传输到POST请求?这是我想要的:
func deliver(sourceURL *url.URL, destinationURL *url.URL) {
client := &http.Client{}
sourceResponse, err := http.Get(sourceURL.String())
if err == nil {
client.Post(destinationURL.String(), "text/html", sourceResponse.Body)
}
}
我会假设这会工作,但它只发送一个空请求(没有正文)。为什么是这样? client.Post
函数是不是实际尝试读取响应?
这里的随身操场一个例子:http://play.golang.org/p/_EO80aj6wr 发送的dataReader
代替sourceResponse.Body
作品完美,但在发送sourceResponse.Body
直接不起作用。
实例链接:
http://localhost:3000/fetch?dest=http://requestb.in/177ji621&src=http://www.google.com
http://requestb.in/177ji621?inspect
不知道为什么它不适合我。尝试检查所有错误,但没有问题。我可以确认请求正在发送,但主体仍然是空的。 – 2014-10-04 09:16:08
如果您需要更多帮助,请发布一个演示问题的实例。 – 2014-10-04 10:07:04
我已经在问题中添加了一个Go操场示例 - 看起来像我可以清晰地重现。 – 2014-10-04 10:44:09