mirror of
https://github.com/golang/net.git
synced 2026-04-01 02:47:08 +09:00
The go directive is now at 1.23.0, so the go1.7 and go1.9 build constraints are guaranteed to always be satisfied, and their inverse will never be satisfied. Delete all the dead code and merge everything that's left in a single context.go file. Also update docs to match the upstream context package. For golang/go#49506. Change-Id: I317550767838a93af2c2d3dbc7b61f2e37e6fe1c Reviewed-on: https://go-review.googlesource.com/c/net/+/650155 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Damien Neil <dneil@google.com> Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package ctxhttp provides helper functions for performing context-aware HTTP requests.
|
|
package ctxhttp
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// Do sends an HTTP request with the provided http.Client and returns
|
|
// an HTTP response.
|
|
//
|
|
// If the client is nil, http.DefaultClient is used.
|
|
//
|
|
// The provided ctx must be non-nil. If it is canceled or times out,
|
|
// ctx.Err() will be returned.
|
|
func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
|
|
if client == nil {
|
|
client = http.DefaultClient
|
|
}
|
|
resp, err := client.Do(req.WithContext(ctx))
|
|
// If we got an error, and the context has been canceled,
|
|
// the context's error is probably more useful.
|
|
if err != nil {
|
|
select {
|
|
case <-ctx.Done():
|
|
err = ctx.Err()
|
|
default:
|
|
}
|
|
}
|
|
return resp, err
|
|
}
|
|
|
|
// Get issues a GET request via the Do function.
|
|
func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
|
|
req, err := http.NewRequest("GET", url, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return Do(ctx, client, req)
|
|
}
|
|
|
|
// Head issues a HEAD request via the Do function.
|
|
func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
|
|
req, err := http.NewRequest("HEAD", url, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return Do(ctx, client, req)
|
|
}
|
|
|
|
// Post issues a POST request via the Do function.
|
|
func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) {
|
|
req, err := http.NewRequest("POST", url, body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
req.Header.Set("Content-Type", bodyType)
|
|
return Do(ctx, client, req)
|
|
}
|
|
|
|
// PostForm issues a POST request via the Do function.
|
|
func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) {
|
|
return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
|
|
}
|