httpmitm

package
v0.0.0-...-ff9afc2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 25, 2024 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package httpmitm contains an HTTP client that logs all incoming and outgoing requests.

Example
package main

import (
	"bytes"
	"fmt"
	"net/http"
	"net/http/httptest"
	"strings"
)

func getBody(s string) (body []string) {
	pastHeaders := false
	for _, part := range strings.Split(s, "\r\n") {
		if pastHeaders {
			body = append(body, part)
		} else if part == "" {
			pastHeaders = true
		}
	}
	return
}

func main() {
	// Setup test server.
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello, Client!"))
	}))
	defer ts.Close()

	// Setup instrumented client.
	type record struct {
		o Origin
		d string
	}
	var records []*record
	client := http.Client{
		Transport: &Transport{
			Callback: func(o Origin, data []byte, err error) {
				records = append(records, &record{o, string(data)})
			},
		},
	}

	_, err := client.Post(ts.URL, "test", bytes.NewBufferString("Hail, Server!"))
	if err != nil {
		return
	}

	// There should be two records: request and response.
	for idx, r := range records {
		fmt.Printf("%d) %s\n", idx, r.o)
		for _, line := range getBody(r.d) {
			fmt.Println(line)
		}
	}

}
Output:

0) Request
Hail, Server!
1) Response
Hello, Client!

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Callback

type Callback func(Origin, []byte, error)

Callback is a callback method that is invoked during HTTP communications to forward captured data.

type Origin

type Origin uint

Origin is an enumeration used to annotate which type of data is being fed to the callback.

const (
	Request Origin = iota
	Response
)

Log transport types.

func (Origin) String

func (t Origin) String() string

String converts a Origin to a user-friendly string.

type Transport

type Transport struct {
	// Underlying RoundTripper; uses http.DefaultTransport if nil.
	http.RoundTripper

	Callback Callback // Output callback.
}

Transport is an implementation of http.RoundTripper that logs outgoing requests and incoming responses.

func (*Transport) RoundTrip

func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements the http.RoundTripper interface.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL