Golang
Capture HTTP/HTTPS from Golang application (net/http, fasthttp, resty, gorequest, req, grequests) with Proxyman
1. New Automatic Solution (macOS v5.17.0 or later) ✅
Proxyman macOS v5.17.0 or later can capture HTTP/HTTPS traffic from Golang with 1-click.
1-click solution: No need to manually set HTTP Proxy config or trust the self-signed certificate.
✅ Support many Go Network Libraries: net/http, fasthttp, resty, gorequest, req, grequests
How to use:
Open Proxyman -> Setup Menu -> Automatic Setup
Select your favorite Terminal -> Click on the "Open New Terminal" button
Accept the Apple Script permission prompt if needed

The New Terminal app is launched -> You can start your Golang Backend Server, or Run scripts => Proxyman automatically captures all traffic.
For example:
$ go run main.go
Proxyman captures all internal HTTP/HTTPS from go, including net/http

Go Example Code: https://github.com/ProxymanApp/golang-example
2. Old Solution (Not recommended ❌)
Proxyman can't capture any HTTP/HTTPS traffic from the Golang Server.
The reason is that some network libraries (such as net/http) won't respect the System HTTP Proxy, so no traffic goes through the Proxyman app.
2.1 Solution
net/http
Config Proxy to Proxyman, by default, it's at IP = localhost, port 9090
Tell the Transport to trust Proxyman self-signed certificate. Otherwise, you will get an SSL Error because net/http rejects.
package main
import (
"crypto/tls"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
)
func main() {
// Create a new HTTP client
client := &http.Client{}
// Configure the proxy
proxyURL, err := url.Parse("http://localhost:9090")
if err != nil {
log.Fatal("Error parsing proxy URL:", err)
}
// Configure transport with proxy and TLS settings
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // This allows self-signed certificates
},
}
// Set the transport for the client
client.Transport = transport
// Make a request
resp, err := client.Get("https://example.com")
if err != nil {
log.Fatal("Error making request:", err)
}
defer resp.Body.Close()
// Read the response body
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal("Error reading response:", err)
}
// Print the response
fmt.Printf("Status: %s\n", resp.Status)
fmt.Printf("Body: %s\n", string(body))
}
Last updated