proxy.txt
domain=https://www.baidu.com
port=8080
main.go
package main
import (
"fmt"
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
"strings"
)
func main() {
// 读取 proxy.txt 文件内容
data, err := os.ReadFile("proxy.txt")
if err != nil {
log.Fatal(err)
}
// 解析 proxy.txt 文件内容
lines := strings.Split(string(data), "\n")
config := make(map[string]string)
for _, line := range lines {
parts := strings.Split(line, "=")
if len(parts) == 2 {
config[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1])
}
}
// 从配置中获取域名和端口号
domain := config["domain"]
port := config["port"]
// 解析协议和主机
targetURL, err := url.Parse(domain)
if err != nil {
log.Fatal("Failed to parse target URL:", err)
}
// 创建一个反向代理
proxy := httputil.NewSingleHostReverseProxy(targetURL)
// 修改请求头中的Host字段,确保请求发送到正确的目标主机
proxy.Director = func(req *http.Request) {
req.URL.Scheme = targetURL.Scheme
req.URL.Host = targetURL.Host
req.Host = targetURL.Host
// 添加自定义的Origin字段
req.Header.Set("Origin", targetURL.Scheme+"://"+targetURL.Host)
}
// 处理跨域请求
proxy.ModifyResponse = func(resp *http.Response) error {
// 添加允许跨域的头部信息
resp.Header.Set("Access-Control-Allow-Origin", "*")
resp.Header.Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
// 添加 x-custom-header
resp.Header.Set("Access-Control-Allow-Headers", "Content-Type, x-custom-header")
return nil
}
// 创建一个HTTP服务器来接收客户端请求
server := &http.Server{
Addr: ":" + port, // 服务器监听的端口,从配置中获取
Handler: proxy, // 使用反向代理处理请求
}
fmt.Printf("Starting server on port %s...\n", port)
log.Fatal(server.ListenAndServe())
}