Qingluan / merkur

golang proxy.Dialer lib for http or raw tcp , / socks5 / ss / ssr / vmess / ordered url / and Proxy pool
GNU General Public License v3.0
8 stars 2 forks source link

Usage

// 
//  support vmess / ss / ssr / socks 
//

if dialer := NewProxyDialer("vmess://..."); dialer != nil{
        dialer.Dial("tcp",target)
}

// http:

if client := merkur.NewProxyHttpClient("ssr://...."); client != nil {
        client.Get("https://www.google.com")
}

Example


package main

import (
        "flag"
        "fmt"
        "log"
        "strings"
        "sync"
        "time"

        "github.com/Qingluan/merkur"
)

func main() {
        var testurlorder string
        var url string
        flag.StringVar(&testurlorder, "o", "", "order url or ssr/ss uri")
        flag.StringVar(&url, "u", "", "target test")
        flag.Parse()

        if url == "" {
                url = "https://www.google.com"
        }
        var wait sync.WaitGroup
        if testurlorder != "" && strings.HasPrefix(testurlorder, "http") {
                for _, ssurl := range merkur.ParserOrder(testurlorder) {
                        fmt.Println(ssurl)
                        wait.Add(1)
                        go func(url string, ssurl string) {
                                defer wait.Done()
                                if client := merkur.NewProxyHttpClient(ssurl); client != nil {
                                        st := time.Now()
                                        if res, err := client.Get(url); err != nil {
                                                log.Println("used:", time.Now().Sub(st), "err:", err)
                                        } else {
                                                log.Println("used:", time.Now().Sub(st), "code:", res.StatusCode, "proxy:", merkur.MustParseUri(ssurl))
                                        }
                                }

                        }(url, ssurl)
                }
                wait.Wait()
        } else {
                if client := merkur.NewProxyHttpClient(testurlorder); client != nil {
                        st := time.Now()
                        if res, err := client.Get(url); err != nil {
                                log.Println("used:", time.Now().Sub(st), "err:", err)
                        } else {
                                log.Println("used:", time.Now().Sub(st), "code:", res.StatusCode, "proxy:", merkur.MustParseUri(testurlorder))
                        }
                }
        }
}