ForkBasetenBasetenpublished Mar 17, 2026seen 5d

basetenlabs/goproxy

forked from elazarl/goproxy

Open original ↗

Captured source

source ↗
published Mar 17, 2026seen 5dcaptured 14hhttp 200method plain

basetenlabs/goproxy

Description: An HTTP proxy library for Go

Language: Go

License: BSD-3-Clause

Stars: 0

Forks: 0

Open issues: 1

Created: 2026-03-17T20:45:34Z

Pushed: 2026-05-18T19:00:59Z

Default branch: master

Fork: yes

Parent repository: elazarl/goproxy

Archived: no

README:

GoProxy

!Status ![GoDoc](https://pkg.go.dev/github.com/elazarl/goproxy) ![Go Report](https://goreportcard.com/report/github.com/elazarl/goproxy) ![Awesome Go](https://github.com/avelino/awesome-go?tab=readme-ov-file#networking)

GoProxy is a library to create a customized HTTP/HTTPS proxy server using Go (aka Golang), with several configurable settings available. The target of this project is to offer an optimized proxy server, usable with reasonable amount of traffic, yet customizable and programmable.

The proxy itself is simply a net/http handler, so you can add multiple middlewares (panic recover, logging, compression, etc.) over it. It can be easily integrated with any other HTTP network library.

In order to use goproxy, one should set their browser (or any other client) to use goproxy as an HTTP proxy. Here is how you do that in Chrome and in Firefox. If you decide to start with the base example, the URL you should use as proxy is localhost:8080, which is the default one in our example. You also have to trust the proxy CA certificate, to avoid any certificate issue in the clients.

> ✈️ Telegram Group > > 🎁 Become a Sponsor

Features

  • Perform certain actions only on specific hosts, with a single equality comparison or with regex evaluation
  • Manipulate requests and responses before sending them to the browser
  • Use a custom http.Transport to perform requests to the target server
  • You can specify a MITM certificates cache, to reuse them later for other requests to the same host, thus saving CPU. Not enabled by default, but you should use it in production!
  • Redirect normal HTTP traffic to a custom handler, when the target is a relative path (e.g. /ping)
  • You can choose the logger to use, by implementing the Logger interface
  • You can disable the HTTP request headers canonicalization, by setting PreventCanonicalization to true

Proxy modes

1. Regular HTTP proxy 2. HTTPS through CONNECT 3. HTTPS MITM ("Man in the Middle") proxy server, in which the server generate TLS certificates to parse request/response data and perform actions on them 4. "Hijacked" proxy connection, where the configured handler can access the raw net.Conn data

Sponsors

Does your company use GoProxy? Help us keep the project maintained and healthy! Supporting GoProxy allows us to dedicate more time to bug fixes and new features. In exchange, if you choose a Gold Supporter or Enterprise plan, we'll proudly display your company logo here.

> Become a Sponsor

![Gold Supporters](https://opencollective.com/goproxy) ![Enterprise Supporters](https://opencollective.com/goproxy)

Maintainers

If you need to integrate GoProxy into your project, or you need some custom features to maintain in your fork, you can contact [Erik](mailto:erikpelli@tutamail.com) (the current maintainer) by email, and you can discuss together how he can help you as a paid independent consultant.

Contributions

If you have any trouble, suggestion, or if you find a bug, feel free to reach out by opening a GitHub issue. This is an open source project managed by volunteers, and we're happy to discuss anything that can improve it.

Make sure to explain everything, including the reason behind the issue and what you want to change, to make the problem easier to understand. You can also directly open a Pull Request, if it's a small code change, but you need to explain in the description everything. If you open a pull request named refactoring with 5,000 lines changed, we won't merge it... :D

The code for this project is released under the BSD 3-Clause license, making it useful for commercial uses as well.

Submit your case study

So, you have introduced & integrated GoProxy into one of your personal projects or a project inside the company you work for.

We're happy to learn about new creative solutions made with this library, so feel free to contact the maintainer listed above via e-mail, to explaining why you found this project useful for your needs.

If you have signed a Non Disclosure Agreement with the company, you can propose them to write a blog post on their official website about this topic, so this information will be public by their choice, and you can share the link of the blog post with us :)

The purpose of case studies is to share with the community why all the contributors to this project are improving the world with their help and what people are building using it.

Linter

The codebase uses an automatic lint check over your Pull Request code. Before opening it, you should check if your changes respect it, by running the linter in your local machine, so you won't have any surprise.

To install the linter:

go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

This will create an executable in your $GOPATH/bin folder ($GOPATH is an environment variable, usually its value is equivalent to ~/go, check its value in your machine if you aren't sure about it). Make sure to include the bin folder in the path of your shell, to be able to directly use the golangci-lint run command.

A taste of GoProxy

To get a taste of goproxy, here you are a basic HTTP/HTTPS proxy that just forward data to the destination:

package main

import (
"log"
"net/http"…

Excerpt shown — open the source for the full document.

Notability

notability 1.0/10

Routine fork by same entity, no traction