@@ -3777,6 +3777,52 @@ func testTransportIDNA(t *testing.T, h2 bool) {
3777
3777
}
3778
3778
}
3779
3779
3780
+ // Issue 13290: send User-Agent in proxy CONNECT
3781
+ func TestTransportProxyConnectHeader (t * testing.T ) {
3782
+ defer afterTest (t )
3783
+ reqc := make (chan * Request , 1 )
3784
+ ts := httptest .NewServer (HandlerFunc (func (w ResponseWriter , r * Request ) {
3785
+ if r .Method != "CONNECT" {
3786
+ t .Errorf ("method = %q; want CONNECT" , r .Method )
3787
+ }
3788
+ reqc <- r
3789
+ c , _ , err := w .(Hijacker ).Hijack ()
3790
+ if err != nil {
3791
+ t .Errorf ("Hijack: %v" , err )
3792
+ return
3793
+ }
3794
+ c .Close ()
3795
+ }))
3796
+ defer ts .Close ()
3797
+ tr := & Transport {
3798
+ ProxyConnectHeader : Header {
3799
+ "User-Agent" : {"foo" },
3800
+ "Other" : {"bar" },
3801
+ },
3802
+ Proxy : func (r * Request ) (* url.URL , error ) {
3803
+ return url .Parse (ts .URL )
3804
+ },
3805
+ }
3806
+ defer tr .CloseIdleConnections ()
3807
+ c := & Client {Transport : tr }
3808
+ res , err := c .Get ("https://dummy.tld/" ) // https to force a CONNECT
3809
+ if err == nil {
3810
+ res .Body .Close ()
3811
+ t .Errorf ("unexpected success" )
3812
+ }
3813
+ select {
3814
+ case <- time .After (3 * time .Second ):
3815
+ t .Fatal ("timeout" )
3816
+ case r := <- reqc :
3817
+ if got , want := r .Header .Get ("User-Agent" ), "foo" ; got != want {
3818
+ t .Errorf ("CONNECT request User-Agent = %q; want %q" , got , want )
3819
+ }
3820
+ if got , want := r .Header .Get ("Other" ), "bar" ; got != want {
3821
+ t .Errorf ("CONNECT request Other = %q; want %q" , got , want )
3822
+ }
3823
+ }
3824
+ }
3825
+
3780
3826
var errFakeRoundTrip = errors .New ("fake roundtrip" )
3781
3827
3782
3828
type funcRoundTripper func ()
0 commit comments