43 lines
916 B
Go
43 lines
916 B
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// createHTTPClient creates an http.Client with support for HTTP or unix socket transport
|
|
func createHTTPClient(serverURL string) (*http.Client, string, error) {
|
|
if strings.HasPrefix(serverURL, "unix://") {
|
|
// Extract socket path and strip the scheme
|
|
socketPath := strings.TrimPrefix(serverURL, "unix://")
|
|
|
|
// We'll fake a URL host for use in requests
|
|
baseURL := "http://unix"
|
|
|
|
transport := &http.Transport{
|
|
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
|
|
return net.Dial("unix", socketPath)
|
|
},
|
|
}
|
|
|
|
return &http.Client{
|
|
Transport: transport,
|
|
Timeout: 2 * time.Second,
|
|
}, baseURL, nil
|
|
}
|
|
|
|
// Default HTTP transport
|
|
parsed, err := url.Parse(serverURL)
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
|
|
return &http.Client{
|
|
Timeout: 2 * time.Second,
|
|
}, parsed.String(), nil
|
|
}
|