MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / HTTPDial

Function HTTPDial

core/utils/ssh/http.go:22–81  ·  view source on GitHub ↗
(dialer HTTPProxyDialer, network, addr string)

Source from the content-addressed store, hash-verified

20}
21
22func HTTPDial(dialer HTTPProxyDialer, network, addr string) (net.Conn, error) {
23 var conn net.Conn
24 var err error
25
26 global.LOG.Debugf("Dialing HTTP proxy %s for %s", dialer.URL, addr)
27 dialer.URL = strings.TrimPrefix(dialer.URL, dialer.Type+"://")
28 if dialer.Type == "https" {
29 conn, err = tls.DialWithDialer(
30 &net.Dialer{Timeout: 30 * time.Second},
31 network,
32 dialer.URL,
33 &tls.Config{InsecureSkipVerify: true},
34 )
35 } else {
36 conn, err = net.DialTimeout(network, dialer.URL, 30*time.Second)
37 }
38 if err != nil {
39 return nil, err
40 }
41 conn.SetDeadline(time.Now().Add(30 * time.Second))
42 connectReq := fmt.Sprintf("CONNECT %s HTTP/1.1\r\n", addr)
43 connectReq += fmt.Sprintf("Host: %s\r\n", addr)
44 connectReq += "User-Agent: Go-ssh-client/1.0\r\n"
45
46 if dialer.User != "" {
47 auth := base64.StdEncoding.EncodeToString(
48 []byte(dialer.User + ":" + dialer.Password),
49 )
50 connectReq += fmt.Sprintf("Proxy-Authorization: Basic %s\r\n", auth)
51 }
52 connectReq += "Connection: keep-alive\r\n\r\n"
53 if _, err := conn.Write([]byte(connectReq)); err != nil {
54 conn.Close()
55 return nil, err
56 }
57 reader := bufio.NewReader(conn)
58 response, err := reader.ReadString('\n')
59 if err != nil {
60 conn.Close()
61 return nil, err
62 }
63 if !strings.HasPrefix(response, "HTTP/1.1 200") &&
64 !strings.HasPrefix(response, "HTTP/1.0 200") {
65 conn.Close()
66 return nil, fmt.Errorf("proxy connection failed: %s", strings.TrimSpace(response))
67 }
68 for {
69 line, err := reader.ReadString('\n')
70 if err != nil {
71 conn.Close()
72 return nil, err
73 }
74 if line == "\r\n" || line == "\n" {
75 break
76 }
77 }
78 conn.SetDeadline(time.Time{})
79

Callers 1

loadSSHConnByProxyFunction · 0.85

Calls 2

CloseMethod · 0.65
WriteMethod · 0.45

Tested by

no test coverage detected