这里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