client.go

 1// Copyright The OpenTelemetry Authors
 2// SPDX-License-Identifier: Apache-2.0
 3
 4package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
 5
 6import (
 7	"context"
 8	"io"
 9	"net/http"
10	"net/url"
11	"strings"
12)
13
14// DefaultClient is the default Client and is used by Get, Head, Post and PostForm.
15// Please be careful of initialization order - for example, if you change
16// the global propagator, the DefaultClient might still be using the old one.
17var DefaultClient = &http.Client{Transport: NewTransport(http.DefaultTransport)}
18
19// Get is a convenient replacement for http.Get that adds a span around the request.
20func Get(ctx context.Context, targetURL string) (resp *http.Response, err error) {
21	req, err := http.NewRequestWithContext(ctx, "GET", targetURL, nil)
22	if err != nil {
23		return nil, err
24	}
25	return DefaultClient.Do(req)
26}
27
28// Head is a convenient replacement for http.Head that adds a span around the request.
29func Head(ctx context.Context, targetURL string) (resp *http.Response, err error) {
30	req, err := http.NewRequestWithContext(ctx, "HEAD", targetURL, nil)
31	if err != nil {
32		return nil, err
33	}
34	return DefaultClient.Do(req)
35}
36
37// Post is a convenient replacement for http.Post that adds a span around the request.
38func Post(ctx context.Context, targetURL, contentType string, body io.Reader) (resp *http.Response, err error) {
39	req, err := http.NewRequestWithContext(ctx, "POST", targetURL, body)
40	if err != nil {
41		return nil, err
42	}
43	req.Header.Set("Content-Type", contentType)
44	return DefaultClient.Do(req)
45}
46
47// PostForm is a convenient replacement for http.PostForm that adds a span around the request.
48func PostForm(ctx context.Context, targetURL string, data url.Values) (resp *http.Response, err error) {
49	return Post(ctx, targetURL, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
50}