httputil 反向代理,打印头信息
最后更新于:2022-04-02 02:44:58
[TOC]
## httputil
### httputil.DumpRequest 打印完整请求头
```
func Api(w http.ResponseWriter, r *http.Request) {
request, err := httputil.DumpRequest(r, true)
if err != nil {
http.Error(w, "asd", 200)
}
fmt.Printf("%q\n", request)
io.WriteString(w, "ok")
}
```
curl
```
curl -X POST -d "hello world" -i http://127.0.0.1:1234/api
```
打印
```
POST /api HTTP/1.1\r\nHost: 127.0.0.1:1234\r\nAccept: */*\r\nContent-Length: 11\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: curl/7.55.1\r\n\r\nhello world
```
### httputil.DumpResponse() 答应响应体
```
// 模拟http server
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello")
}))
res, err := http.Get(s.URL)
if err != nil {
log.Fatal(err)
}
response, _ := httputil.DumpResponse(res, true)
fmt.Printf("%q\n", response)
// HTTP/1.1 200 OK\r\nContent-Length: 5\r\nContent-Type: text/plain; charset=utf-8\r\nDate: Mon, 28 Dec 2020 06:08:41 GMT\r\n\r\nhello
```
### httputil.NewSingleHostReverseProxy 代理转发
```
http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
proxy, e := url.Parse("http://127.0.0.1:9092")
if e != nil {
panic(e)
}
reverseProxy := httputil.NewSingleHostReverseProxy(proxy)
reverseProxy.ServeHTTP(w, r)
})
```
';