Go utilities to help debug HTTP requests.
While maintaining the github.com/google/go-github
repo, I've realized that the vast majority of reported "issues" actually could be
resolved by the user of the repo if they had an easy way to duplicate the
GitHub v3 API call using the equivalent curl
command. However, it is not always
a simple matter to figure out what that command should actually be.
This repo provides a simple http.RoundTripper
that, when added as an additional
Transport
, will dump out the equivalent curl
command for every request made
through it (to os.Stderr
).
If you have a simple http.Client
, then you can add CurlTransport
like this:
ct := httpdebug.New()
c := &http.Client{Transport: ct}
...
or like this:
c := &http.Client{Timeout: timeout}
if debug {
ct := httpdebug.New(httpdebug.WithTransport(c.Transport))
c = ct.Client()
}
If your client already uses a transport, you can inject it like this:
import (
dbg "github.com/gmlewis/go-httpdebug/httpdebug"
"github.com/google/go-github/v50/github"
"golang.org/x/oauth2"
)
...
ctx := context.Background()
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: token},
)
tc := &oauth2.Transport{Source: ts, Base: dbg.New()}
client := github.NewClient(&http.Client{Transport: tc})
Copyright 2022 Glenn M. Lewis. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.