@@ -28,9 +28,9 @@ func (fn netDialerFunc) DialContext(ctx context.Context, network, addr string) (
2828 return fn (ctx , network , addr )
2929}
3030
31- func proxyFromURL (proxyURL * url.URL , forwardDial netDialerFunc ) (netDialerFunc , error ) {
31+ func proxyFromURL (proxyURL * url.URL , forwardDial netDialerFunc , connectHeader http. Header ) (netDialerFunc , error ) {
3232 if proxyURL .Scheme == "http" || proxyURL .Scheme == "https" {
33- return (& httpProxyDialer {proxyURL : proxyURL , forwardDial : forwardDial }).DialContext , nil
33+ return (& httpProxyDialer {proxyURL : proxyURL , forwardDial : forwardDial , proxyConnectHeader : connectHeader }).DialContext , nil
3434 }
3535 dialer , err := proxy .FromURL (proxyURL , forwardDial )
3636 if err != nil {
@@ -45,8 +45,13 @@ func proxyFromURL(proxyURL *url.URL, forwardDial netDialerFunc) (netDialerFunc,
4545}
4646
4747type httpProxyDialer struct {
48- proxyURL * url.URL
49- forwardDial netDialerFunc
48+ proxyURL * url.URL
49+ forwardDial netDialerFunc
50+ proxyConnectHeader http.Header
51+ }
52+
53+ func (hpd * httpProxyDialer ) Dial (network , addr string ) (net.Conn , error ) {
54+ return hpd .DialContext (context .Background (), network , addr )
5055}
5156
5257func (hpd * httpProxyDialer ) DialContext (ctx context.Context , network string , addr string ) (net.Conn , error ) {
@@ -56,7 +61,11 @@ func (hpd *httpProxyDialer) DialContext(ctx context.Context, network string, add
5661 return nil , err
5762 }
5863
59- connectHeader := make (http.Header )
64+ connectHeader := hpd .proxyConnectHeader
65+ if hpd .proxyConnectHeader == nil {
66+ connectHeader := make (http.Header )
67+ }
68+
6069 if user := hpd .proxyURL .User ; user != nil {
6170 proxyUser := user .Username ()
6271 if proxyPassword , passwordSet := user .Password (); passwordSet {
0 commit comments