Skip to content
Snippets Groups Projects
Select Git revision
  • 72e1fd593126f6cad008a1b778b72f46bca9fcf1
  • master default protected
  • v1.16.5
  • v1.16.4
  • v1.16.3
  • v1.16.2
  • v1.16.1
  • v1.16.0
  • v1.15.0
  • v1.14.0
  • v1.13.2
  • v1.13.1
  • v1.13.0
  • v1.12.0
  • v1.11.0
  • v1.10.2
  • v1.10.1
  • v1.10.0
  • v1.9.0
  • v1.8.3
  • v1.8.2
  • v1.8.1
22 results

xflags

  • Clone with SSH
  • Clone with HTTPS
  • go-httpbin

    A reasonably complete and well-tested golang port of Kenneth Reitz's httpbin service, with zero dependencies outside the go stdlib.

    GoDoc Build Status Coverage

    Usage

    Run as a standalone binary, configured by command line flags or environment variables:

    $ go-httpbin -help
    Usage of ./dist/go-httpbin:
      -max-duration duration
            Maximum duration a response may take (default 10s)
      -max-memory int
            Maximum size of request or response, in bytes (default 1048576)
      -port int
            Port to listen on (default 8080)

    Docker images are published to Docker Hub:

    $ docker run -P mccutchen/go-httpbin

    The github.com/mccutchen/go-httpbin/httpbin package can also be used as a library for testing an applications interactions with an upstream HTTP service, like so:

    package httpbin_test
    
    import (
        "net/http"
        "net/http/httptest"
        "testing"
        "time"
    
        "github.com/mccutchen/go-httpbin/httpbin"
    )
    
    func TestSlowResponse(t *testing.T) {
        handler := httpbin.NewHTTPBin().Handler()
        srv := httptest.NewServer(handler)
        defer srv.Close()
    
        client := http.Client{
            Timeout: time.Duration(1 * time.Second),
        }
        _, err := client.Get(srv.URL + "/delay/10")
        if err == nil {
            t.Fatal("expected timeout error")
        }
    }

    Installation

    go get github.com/mccutchen/go-httpbin/...

    Motivation & prior art

    I've been a longtime user of Kenneith Reitz's original httpbin.org, and wanted to write a golang port for fun and to see how far I could get using only the stdlib.

    When I started this project, there were a handful of existing and incomplete golang ports, with the most promising being ahmetb/go-httpbin. This project showed me how useful it might be to have an httpbin library available for testing golang applications.

    Known differences from other httpbin versions

    Compared to the original:

    • No /brotli endpoint (due to lack of support in Go's stdlib)
    • The ?show_env=1 query param is ignored (i.e. no special handling of runtime environment headers)
    • Response values which may be encoded as either a string or a list of strings will always be encoded as a list of strings (e.g. request headers, query params, form values)

    Compared to ahmetb/go-httpbin:

    • No dependencies on 3rd party packages
    • More complete implementation of endpoints

    Development

    # local development
    make
    make test
    make testcover
    make run
    
    # building & pushing docker images
    make image
    make imagepush