https://github.com/telanflow/mps
MPS is a high-performance HTTP(S) proxy library that supports forward proxies, reverse proxies, man-in-the-middle proxies, tunnel proxies, Websocket proxies. MPS 是一个高性能HTTP(s)中间代理库,它支持正向代理、反向代理、中间人代理、隧道代理、Websocket代理
https://github.com/telanflow/mps
agent forward forward-proxy go-proxy goproxy http-proxy https-proxy man-in-the-middle middleware mitm mitmproxy mps proxies proxy proxy-server reverse reverse-proxy socks5-proxy tunnel-proxy weksocket-proxy
Last synced: 5 months ago
JSON representation
MPS is a high-performance HTTP(S) proxy library that supports forward proxies, reverse proxies, man-in-the-middle proxies, tunnel proxies, Websocket proxies. MPS 是一个高性能HTTP(s)中间代理库,它支持正向代理、反向代理、中间人代理、隧道代理、Websocket代理
- Host: GitHub
- URL: https://github.com/telanflow/mps
- Owner: telanflow
- License: bsd-3-clause
- Created: 2020-07-31T03:58:43.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-09-01T06:21:32.000Z (over 1 year ago)
- Last Synced: 2024-11-07T23:39:57.950Z (6 months ago)
- Topics: agent, forward, forward-proxy, go-proxy, goproxy, http-proxy, https-proxy, man-in-the-middle, middleware, mitm, mitmproxy, mps, proxies, proxy, proxy-server, reverse, reverse-proxy, socks5-proxy, tunnel-proxy, weksocket-proxy
- Language: Go
- Homepage:
- Size: 188 KB
- Stars: 95
- Watchers: 4
- Forks: 17
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-awesome - telanflow/mps - proxy,go-proxy,goproxy,http-proxy,https-proxy,man-in-the-middle,middleware,mitm,mitmproxy,mps,proxies,proxy,proxy-server,reverse,reverse-proxy,socks5-proxy,tunnel-proxy,weksocket-proxy pushed_at:2023-09 star:0.1k fork:0.0k MPS is a high-performance HTTP(S) proxy library that supports forward proxies, reverse proxies, man-in-the-middle proxies, tunnel proxies, Websocket proxies. MPS 是一个高性能HTTP(s)中间代理库,它支持正向代理、反向代理、中间人代理、隧道代理、Websocket代理 (Go)
README
MPS
English | [🇨🇳中文](README_ZH.md)
## 📖 Introduction




[](https://github.com/telanflow/mps/LICENSE)MPS (middle-proxy-server) is an high-performance middle proxy library. support HTTP, HTTPS, Websocket, ForwardProxy, ReverseProxy, TunnelProxy, MitmProxy.
## 🚀 Features
- [X] Http Proxy
- [X] Https Proxy
- [X] Forward Proxy
- [X] Reverse Proxy
- [X] Tunnel Proxy
- [X] Mitm Proxy (Man-in-the-middle)
- [X] WekSocket Proxy## 🧰 Install
```
go get -u github.com/telanflow/mps
```## 🛠 How to use
A simple proxy service```go
package mainimport (
"github.com/telanflow/mps"
"log"
"net/http"
)func main() {
proxy := mps.NewHttpProxy()
log.Fatal(http.ListenAndServe(":8080", proxy))
}
```More [examples](https://github.com/telanflow/mps/tree/master/_examples)
## 🧬 Middleware
Middleware can intercept requests and responses.
we have several middleware implementations built in, including [BasicAuth](https://github.com/telanflow/mps/tree/master/middleware)```go
func main() {
proxy := mps.NewHttpProxy()
proxy.Use(mps.MiddlewareFunc(func(req *http.Request, ctx *mps.Context) (*http.Response, error) {
log.Printf("[INFO] middleware -- %s %s", req.Method, req.URL)
return ctx.Next(req)
}))
proxy.UseFunc(func(req *http.Request, ctx *mps.Context) (*http.Response, error) {
log.Printf("[INFO] middleware -- %s %s", req.Method, req.URL)
resp, err := ctx.Next(req)
if err != nil {
return nil, err
}
log.Printf("[INFO] resp -- %d", resp.StatusCode)
return resp, err
})
log.Fatal(http.ListenAndServe(":8080", proxy))
}
```## ♻️ Filters
Filters can filter requests and responses for unified processing.
It is based on middleware implementation.```go
func main() {
proxy := mps.NewHttpProxy()
// request Filter Group
reqGroup := proxy.OnRequest(mps.FilterHostMatches(regexp.MustCompile("^.*$")))
reqGroup.DoFunc(func(req *http.Request, ctx *mps.Context) (*http.Request, *http.Response) {
log.Printf("[INFO] req -- %s %s", req.Method, req.URL)
return req, nil
})
// response Filter Group
respGroup := proxy.OnResponse()
respGroup.DoFunc(func(resp *http.Response, err error, ctx *mps.Context) (*http.Response, error) {
if err != nil {
log.Printf("[ERRO] resp -- %s %v", ctx.Request.Method, err)
return nil, err
}
log.Printf("[INFO] resp -- %d", resp.StatusCode)
return resp, err
})
log.Fatal(http.ListenAndServe(":8080", proxy))
}
```## 📄 License
Source code in `MPS` is available under the [BSD 3 License](/LICENSE).