以下是一个使用Go编写的HTTP代理服务器的示例代码:

package main

import (
    "fmt"
    "io"
    "log"
    "net"
    "net/http"
)

func main() {
    // 创建代理服务器
    proxy := &ProxyServer{}

    // 监听端口
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }

    // 处理客户端请求
    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Printf("failed to accept connection: %v", err)
            continue
        }
        go proxy.ServeHTTP(conn)
    }
}

// ProxyServer 代理服务器
type ProxyServer struct{}

func (p *ProxyServer) ServeHTTP(conn net.Conn) {
    // 读取客户端请求
    request, err := http.ReadRequest(bufio.NewReader(conn))
    if err != nil {
        log.Printf("failed to read request: %v", err)
        return
    }

    // 打印请求信息
    fmt.Println(request.Method, request.URL.String())

    // 发送请求至目标服务器
    response, err := http.DefaultTransport.RoundTrip(request)
    if err != nil {
        log.Printf("failed to send request: %v", err)
        return
    }

    // 将响应返回给客户端
    err = response.Write(conn)
    if err != nil {
        log.Printf("failed to write response: %v", err)
        return
    }

    // 关闭连接
    err = conn.Close()
    if err != nil {
        log.Printf("failed to close connection: %v", err)
    }
}

这个代理服务器监听在本地的8080端口上,收到客户端请求后,会将请求转发到目标服务器上,并将响应返回给客户端。在这个示例中,我们使用了http包的ReadRequest和RoundTrip方法来发送HTTP请求,并使用io包的Write方法将响应返回给客户端。

golang代理http例子

原文地址: https://www.cveoy.top/t/topic/CfQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录