博客列表 >go实现一个反向代理

go实现一个反向代理

小生我怕怕啊的博客
小生我怕怕啊的博客原创
2023年01月30日 09:07:59495浏览
package mainimport (    "bufio"    "log"    "net/http"    "net/url")var (    proxy_addr = "http://127.0.0.1:2003"    port       = "2002")func handler(w http.ResponseWriter, r *http.Request) {    //step 1 解析代理地址,并更改请求体的协议和主机    proxy, err := url.Parse(proxy_addr)    r.URL.Scheme = proxy.Scheme    r.URL.Host = proxy.Host    //step 2 请求下游    transport := http.DefaultTransport    resp, err := transport.RoundTrip(r)    if err != nil {        log.Print(err)        return    }    //step 3 把下游请求内容返回给上游    for k, vv := range resp.Header {        for _, v := range vv {            w.Header().Add(k, v)        }    }    defer resp.Body.Close()    bufio.NewReader(resp.Body).WriteTo(w)}func main() {    http.HandleFunc("/", handler)    log.Println("Start serving on port " + port)    err := http.ListenAndServe(":"+port, nil)    if err != nil {        log.Fatal(err)    }}
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议