我正在嘗試做一個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