Skip to content

Latest commit

 

History

History
108 lines (86 loc) · 3.01 KB

README_ZH.md

File metadata and controls

108 lines (86 loc) · 3.01 KB


MPS

English | 🇨🇳中文

📖 介绍

MPS stars GitHub release (latest SemVer) GitHub go.mod Go version license

MPS 是一个高性能的中间代理扩展库,支持 HTTP、HTTPS、Websocket、正向代理、反向代理、隧道代理、中间人代理 等代理方式。

🚀 特性

  • Http代理
  • Https代理
  • 正向代理
  • 反向代理
  • 隧道代理
  • 中间人代理 (MITM)
  • WekSocket代理

🧰 安装

go get -u github.com/telanflow/mps

🛠 如何使用

一个简单的HTTP代理服务

package main

import (
    "github.com/telanflow/mps"
    "log"
    "net/http"
)

func main() {
    proxy := mps.NewHttpProxy()
    log.Fatal(http.ListenAndServe(":8080", proxy))
}

更多 范例

🧬 中间件

中间件可以拦截请求和响应,我们内置实现了多个中间件,包括 BasicAuth

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))
}

♻️ 过滤器

过滤器可以对请求和响应进行筛选,统一进行处理。 它基于中间件实现。

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))
}

📄 开源许可

MPS中的源代码在BSD 3 License下可用。