mirror of
https://github.com/golang/go
synced 2024-11-19 00:54:42 -07:00
net/http: document setting of Proxy-Authorization header
Add a test for setting a proxy username/password in the HTTP_PROXY environment variable as well. Fixes #61505 Change-Id: I31c3fa94c7bc463133321e9af9289fd47da75b46 Reviewed-on: https://go-review.googlesource.com/c/go/+/512555 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Damien Neil <dneil@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
55db1750ab
commit
0d69747d91
@ -117,6 +117,10 @@ type Transport struct {
|
||||
// "https", and "socks5" are supported. If the scheme is empty,
|
||||
// "http" is assumed.
|
||||
//
|
||||
// If the proxy URL contains a userinfo subcomponent,
|
||||
// the proxy request will pass the username and password
|
||||
// in a Proxy-Authorization header.
|
||||
//
|
||||
// If Proxy is nil or returns a nil *URL, no proxy is used.
|
||||
Proxy func(*Request) (*url.URL, error)
|
||||
|
||||
|
@ -6810,3 +6810,36 @@ func testRequestSanitization(t *testing.T, mode testMode) {
|
||||
resp.Body.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func TestProxyAuthHeader(t *testing.T) {
|
||||
// Not parallel: Sets an environment variable.
|
||||
run(t, testProxyAuthHeader, []testMode{http1Mode}, testNotParallel)
|
||||
}
|
||||
func testProxyAuthHeader(t *testing.T, mode testMode) {
|
||||
const username = "u"
|
||||
const password = "@/?!"
|
||||
cst := newClientServerTest(t, mode, HandlerFunc(func(rw ResponseWriter, req *Request) {
|
||||
// Copy the Proxy-Authorization header to a new Request,
|
||||
// since Request.BasicAuth only parses the Authorization header.
|
||||
var r2 Request
|
||||
r2.Header = Header{
|
||||
"Authorization": req.Header["Proxy-Authorization"],
|
||||
}
|
||||
gotuser, gotpass, ok := r2.BasicAuth()
|
||||
if !ok || gotuser != username || gotpass != password {
|
||||
t.Errorf("req.BasicAuth() = %q, %q, %v; want %q, %q, true", gotuser, gotpass, ok, username, password)
|
||||
}
|
||||
}))
|
||||
u, err := url.Parse(cst.ts.URL)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
u.User = url.UserPassword(username, password)
|
||||
t.Setenv("HTTP_PROXY", u.String())
|
||||
cst.tr.Proxy = ProxyURL(u)
|
||||
resp, err := cst.c.Get("http://_/")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
resp.Body.Close()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user