golang代理http例子
以下是一个使用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方法将响应返回给客户端。
原文地址: https://www.cveoy.top/t/topic/CfQ 著作权归作者所有。请勿转载和采集!