這裏http響應是模式:寫入管讀數到golang
客戶端發送POST請求到服務器A
服務器A進程的這一和發送GET到服務器B
服務器B發送通過一個響應到客戶端
不過,我覺得最好的辦法是讓這將讀取的GET的響應,並寫入到POST的響應管道,但我有很多類型的問題。
func main() {
r := mux.NewRouter()
r.HandleFunc("/test/{hash}", testHandler)
log.Fatal(http.ListenAndServe(":9095", r))
}
func handleErr(err error) {
if err != nil {
log.Fatalf("%s\n", err)
}
}
func testHandler(w http.ResponseWriter, r *http.Request){
fmt.Println("FIRST REQUEST RECEIVED")
vars := mux.Vars(r)
hash := vars["hash"]
read, write := io.Pipe()
// writing without a reader will deadlock so write in a goroutine
go func() {
write, _ = http.Get("http://localhost:9090/test/" + hash)
defer write.Close()
}()
w.Write(read)
}
當我運行此我得到以下錯誤:
./ReverseProxy.go:61:不能在參數中使用讀取(鍵入* io.PipeReader)類型[]字節w.Write
有沒有辦法,以正確地插入到http響應io.PipeReader格式? 還是我以完全錯誤的方式做這件事?
我認爲你誤解了一個io.Pipe的目的。爲什麼不直接將響應中的數據複製到ReponseWriter? (同樣,一個http.Response沒有Close方法,你用http.Response跟蹤PipeWriter,你需要首先檢查錯誤) – JimB