diff --git a/api/http.go b/api/http.go index 49c9263..96050ac 100644 --- a/api/http.go +++ b/api/http.go @@ -130,12 +130,15 @@ func setupCookies(client *http.Client, req *HttpRequest) { if len(req.Cookies) == 0 { return } + parsedURL, err := url.Parse(req.URL) + if err != nil { + return + } cookieJar, _ := cookiejar.New(nil) var cookieList []*http.Cookie for name, value := range req.Cookies { cookieList = append(cookieList, &http.Cookie{Name: name, Value: value}) } - parsedURL, _ := url.Parse(req.URL) cookieJar.SetCookies(parsedURL, cookieList) client.Jar = cookieJar } diff --git a/api/socket.go b/api/socket.go index 42bf6ea..3a96bf9 100644 --- a/api/socket.go +++ b/api/socket.go @@ -1,10 +1,12 @@ package api import ( + "bufio" "fmt" "net" "net/http" "net/url" + "strings" "sync" "time" @@ -319,38 +321,34 @@ func httpConnectProxy(target, proxyAddr string) (net.Conn, error) { return nil, err } - // 读取响应 - buf := make([]byte, 1024) - n, err := conn.Read(buf) + // 读取响应(直到遇到空行) + reader := bufio.NewReader(conn) + line, err := reader.ReadString('\n') if err != nil { conn.Close() return nil, err } // 检查 200 状态 - resp := string(buf[:n]) - if !contains(resp, "200") { + if !strings.Contains(line, "200") { conn.Close() - return nil, fmt.Errorf("代理连接失败: %s", resp) + return nil, fmt.Errorf("代理连接失败: %s", strings.TrimSpace(line)) + } + + // 读取剩余响应头直到空行 + for { + line, err := reader.ReadString('\n') + if err != nil { + break + } + if line == "\r\n" || line == "\n" { + break + } } return conn, nil } -// contains 检查字符串是否包含子串 -func contains(s, substr string) bool { - return len(s) >= len(substr) && (s == substr || len(s) > 0 && containsSubstr(s, substr)) -} - -func containsSubstr(s, substr string) bool { - for i := 0; i <= len(s)-len(substr); i++ { - if s[i:i+len(substr)] == substr { - return true - } - } - return false -} - // tcpBufSize TCP 读取缓冲区大小,64KB 覆盖绝大多数调试场景 const tcpBufSize = 64 << 10