我正在尝试开发一个tcp代理,在这个tcp代理中,我将不得不操纵http和tcp请求。
目前,对于传入的请求,我检测它是http还是tcp请求,如果它是http,那么我将其解析为:http.Request
func (s *TcpProxy) OnMessage(c *connection.Connection, ctx interface{}, data []byte) interface{} {
reader := bytes.NewReader(data)
newReader := bufio.NewReader(reader)
req, err := http.ReadRequest(newReader)
// This is an http request
}
现在,我方便地操作请求,因为我可以使用从该接口公开的方法,然后最终我将响应从我的代理发送回接收入站请求的服务。
func (s *TcpProxy) OnMessage(c *connection.Connection, ctx interface{}, data []byte) interface{} {
reader := bytes.NewReader(data)
newReader := bufio.NewReader(reader)
req, err := http.ReadRequest(newReader)
// Manipulate http request
// ...
// Proxy the request
proxyReq, err := http.NewRequest(req.Method, proxyUrl, req.Body)
// Capture the duration while making a request to the destination service.
res, err := httpClient.Do(proxyReq)
buf := res.ToBuffer() // <= How can I achieve this
c.Send(buf)
c.Close()
return nil
}
但是,我找不到将响应转换回字节或字符串数组的方法,我是否遗漏了某些内容?
芜湖不芜
相关分类