Skip to content

API接入

package main

import (
    "context"
    "fmt"
    "golang.org/x/net/proxy"
    "io/ioutil"
    "log"
    "net"
    "net/http"
    "net/url"
    "strings"
    "sync"
    "time"
)

var targetUrl = "http://ip234.in/ip.json"

//http代理
func httpProxy(proxyUrl, user, pass string) {
    defer func() {
        if err := recover(); err != nil {
            log.Printf("http proxy panic:%s",err)
        }
    }()
    urli := url.URL{}

    if !strings.Contains(proxyUrl, "http") {
        proxyUrl = fmt.Sprintf("http://%s", proxyUrl)
    }

    urlProxy, _ := urli.Parse(proxyUrl)
    if user != "" && pass != "" {
        urlProxy.User = url.UserPassword(user, pass)
    }

    client := &http.Client{
        Transport: &http.Transport{
            Proxy: http.ProxyURL(urlProxy),
        },
    }
    rqt, err := http.NewRequest("GET", targetUrl, nil)
    if err != nil {
        panic(err)
        return
    }
    response, err := client.Do(rqt)
    if err != nil {
        panic(err)
        return
    }

    defer response.Body.Close()
    body, _ := ioutil.ReadAll(response.Body)
    log.Printf("%s http success %s,%s",proxyUrl,response.Status, string(body))
    return
}

//socks5代理
func Socks5Proxy(proxyUrl, user, pass string) {

    defer func() {
        if err := recover(); err != nil {
            log.Printf("socks5 proxy panic:%s",err)
        }
    }()

    var userAuth proxy.Auth
    if user != "" && pass != "" {
        userAuth.User = user
        userAuth.Password = pass
    }
    dialer, err := proxy.SOCKS5("tcp", proxyUrl, &userAuth, proxy.Direct)
    if err != nil {
        panic(err)
    }
    httpClient := &http.Client{
        Transport: &http.Transport{
            DialContext: func(ctx context.Context, network, addr string) (conn net.Conn, err error) {
                return dialer.Dial(network, addr)
            },
        },
        Timeout: time.Second * 10,
    }

    //请求网络
    if resp, err := httpClient.Get(targetUrl); err != nil {
        panic(err)
    } else {
        defer resp.Body.Close()
        body, _ := ioutil.ReadAll(resp.Body)
        log.Printf("%s socks5 success %s",proxyUrl,string(body))
    }
}
func testHttp() {
    # 提取API
    url := "http://list.rola.info:8088/user_get_ip_list?token=TOKEN&qty=10&country=&state=&city=&time=5&format=txt&protocol=http&filter=1"
    resp,err := http.Get(url)
    if err != nil {
        log.Printf("提取ip失败:%s", err)
        return
    }
    defer resp.Body.Close()
    ipsBuffer,_ := ioutil.ReadAll(resp.Body)
    wg := sync.WaitGroup{}
    for _,ip := range strings.Split(string(ipsBuffer),"\r\n") {
        go func() {
            wg.Add(1)
            httpProxy(ip,"","")
            wg.Done()
        }()
    }
    wg.Wait()
}

func testSocks5() {
    # 提取API
    url := "http://list.rola.info:8088/user_get_ip_list?token=TOKEN&qty=10&country=&state=&city=&time=5&format=txt&protocol=socks5&filter=1"
    resp,err := http.Get(url)
    if err != nil {
        log.Printf("提取ip失败:%s", err)
        return
    }
    defer resp.Body.Close()
    ipsBuffer,_ := ioutil.ReadAll(resp.Body)
    wg := sync.WaitGroup{}
    for _,ip := range strings.Split(string(ipsBuffer),"\r\n") {
        go func(ip string) {
            wg.Add(1)
            Socks5Proxy(ip,"","")
            wg.Done()
        }(ip)
    }
    wg.Wait()
}

func main() {
    // testHttp()
    testSocks5()
}

账密接入

package main

import (
    "context"
    "fmt"
    "golang.org/x/net/proxy"
    "io/ioutil"
    "log"
    "math/rand"
    "net"
    "net/http"
    "net/url"
    "strings"
    "sync"
    "time"
)

var targetUrl = "http://ip234.in/ip.json"

//http代理
func httpProxy(proxyUrl, user, pass string) {
    defer func() {
        if err := recover(); err != nil {
            log.Printf("http proxy panic:%s",err)
        }
    }()
    urli := url.URL{}

    if !strings.Contains(proxyUrl, "http") {
        proxyUrl = fmt.Sprintf("http://%s", proxyUrl)
    }

    urlProxy, _ := urli.Parse(proxyUrl)
    if user != "" && pass != "" {
        urlProxy.User = url.UserPassword(user, pass)
    }

    client := &http.Client{
        Transport: &http.Transport{
            Proxy: http.ProxyURL(urlProxy),
        },
    }
    rqt, err := http.NewRequest("GET", targetUrl, nil)
    if err != nil {
        panic(err)
        return
    }
    response, err := client.Do(rqt)
    if err != nil {
        panic(err)
        return
    }

    defer response.Body.Close()
    body, _ := ioutil.ReadAll(response.Body)
    log.Printf("%s http success %s,%s",proxyUrl,response.Status, string(body))
    return
}

//socks5代理
func Socks5Proxy(proxyUrl, user, pass string) {

    defer func() {
        if err := recover(); err != nil {
            log.Printf("socks5 proxy panic:%s",err)
        }
    }()

    var userAuth proxy.Auth
    if user != "" && pass != "" {
        userAuth.User = user
        userAuth.Password = pass
    }
    dialer, err := proxy.SOCKS5("tcp", proxyUrl, &userAuth, proxy.Direct)
    if err != nil {
        panic(err)
    }
    httpClient := &http.Client{
        Transport: &http.Transport{
            DialContext: func(ctx context.Context, network, addr string) (conn net.Conn, err error) {
                return dialer.Dial(network, addr)
            },
        },
        Timeout: time.Second * 10,
    }

    //请求网络
    if resp, err := httpClient.Get(targetUrl); err != nil {
        panic(err)
    } else {
        defer resp.Body.Close()
        body, _ := ioutil.ReadAll(resp.Body)
        log.Printf("%s socks5 success %s",proxyUrl,string(body))
    }
}
func testHttp() {
    # 代理账号
    username := ""
    # 代理密码
    password := ""
    # 国家代码
    country := ""
    # ROLA分配的网关
    gate := "gate.rola.info:1000"

    wg := sync.WaitGroup{}

    times := 0
    for {
        if times >= 10 {
            break
        }
        # 构造用户名, USERNANE-country-COUNTRYCODE-sid-SESSION
        proxyUser := fmt.Sprintf("%s-country-%s-sid-%d",username,country,rand.Int() % 100000)
        go func() {
            wg.Add(1)
            httpProxy(gate,proxyUser, password)
            wg.Done()
        }()

        times++
    }
    wg.Wait()
}

func testSocks5() {
# 代理账号
    username := ""
    # 代理密码
    password := ""
    # 国家代码
    country := ""
    # ROLA分配的网关
    gate := "gate.rola.info:2000"
    wg := sync.WaitGroup{}

    times := 0
    for {
        if times >= 10 {
            break
        }
        # 构造用户名, USERNANE-country-COUNTRYCODE-sid-SESSION
        proxyUser := fmt.Sprintf("%s-country-%s-sid-%d",username,country,rand.Int() % 100000)
        go func() {
            wg.Add(1)
            Socks5Proxy(gate,proxyUser, password)
            wg.Done()
        }()

        times++
    }
    wg.Wait()
}

func main() {
    // testHttp()
    testSocks5()
}

专业的IP代理服务平台