关于go:Go语言学习笔记Http请求Gorequest使用

最近几天部署代理池的时候,用Python写了requests申请测试IP地址检测连通性的脚本。然而发现了一个问题,requests.get带代理申请有时候申请不通。
我初步认为代理的问题,然而之后我用了curl申请发现代理是失常的,用Go写了测试发现还是失常的。难道是requests的问题?目前不晓得是什么起因,之后我用Go写了代理的测试,由此我发现了一个Go语言比拟好用的Http申请的包——Gorequest。

Go语言中net/http的代理申请
net/http申请整体流程并不简单,用nrt/http包的get,post办法都能够实现。
然而,在配置代理上,须要独自配置Client客户端:

1.//发送申请  
2.rqt, err := http.NewRequest("GET", testApi, nil)  
3.if err != nil {  
4.    fmt.Println(err)  
5.    return  
6.}  
7.//配置代理  
8.client := &http.Client{  
9.    Transport: &http.Transport{  
10.        Proxy: http.ProxyURL(urlProxy),  
11.    },  
12.}  
13.response, err := client.Do(rqt)  
14.if err != nil {  
15.    fmt.Println(err)  
16.    panic(err)  
17.    return  
18.}  

直到我发现了Gorequest

Gorequest
$ go get github.com/parnurzeal/gorequest //装置
get申请:

1.request := gorequest.New()  
2.resp, body, errs := request.Get(url).End()  

gorequest代理,非常简单

1.request := gorequest.New().Proxy("代理")  

Gorequest获取代理并进行测试
获取代理办法
定义一个getRes函数,接管url,进行http申请并返回申请内容

1.func getRes(url string) string{  
2.    defer func() {  
3.        err := recover()  
4.        if err != nil {  
5.            fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), "【http error】", "返回信息:", err)  
6.        }  
7.    }()  
8.    //获取代理  
9.    _, body, errs := gorequest.New().Get(url).End()  
10.    if errs != nil {  
11.        panic(errs)  
12.    }  
13.    return body  
14.}  

定义一个getIp办法,获取代理并解决返回的json(首先定义一个构造体以便解决json)

1.type reqinfo struct {  
2.    Code int //返回后果代码  
3.    Success bool //success参数是否申请胜利  
4.    Msg,RequestIp string //返回信息和本地申请的IP地址  
5.    Data []map[string]interface{} //返回的IP,类型是以key为字符串,值为空接口的map组成的array   
6.}  
1.func getiP(getipUrl string){  
2.    defer func() {  
3.        err := recover()  
4.        if err != nil {  
5.            fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), "【http error】", "返回信息:", err)  
6.        }  
7.    }()  
8.    body :=getRes(getipUrl)  
9.    fmt.Println(body)  
10.    //解决json  
11.    var info reqinfo  
12.    err := json.Unmarshal([]byte(body),&info)  
13.    if err != nil {  
14.        fmt.Println("json error",err)  
15.    }  
16.}  

for循环并用goroutine多线程检测IP

1.for _,v := range info.Data{  
2.    IP := v["ip"]  
3.    port := v["port"]  
4.    proxyUrl := fmt.Sprint("http://",IP,":",port)  
5.    fmt.Println(proxyUrl)  
6.    url := "https://api.myip.la/en?json"  
7.    wg.Add(1)  
8.    go ipcheck(url,proxyUrl)  
9.}  
10.wg.Wait() 
1.func ipcheck(url string,proxy string){  
2.    request := gorequest.New().Proxy(proxy)  
3.    _, body, errs := request.Get(url).  
4.        Set("User-Agent", `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36`).  
5.        End()  
6.    if errs != nil {  
7.        fmt.Println(errs)  
8.    }  
9.    fmt.Println(body)  
10.    defer wg.Done()  
11.    defer func() {  
12.        err := recover()  
13.        if err != nil {  
14.            fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), "【http error】", "返回信息:", err)  
15.        }  
16.    }()  
17.}  

测试后果

本次代理测试应用的是ipidea的代理,地区笼罩广,亲测测试通过率不低,新用户能够白嫖流量哦。
地址:http://www.ipidea.net/

残缺代码

1.package main  
2.   
3.import (  
4.    "encoding/json"  
5.    "fmt"  
6.    "github.com/parnurzeal/gorequest"  
7.    "sync"  
8.    "time"  
9.)  
10.   
11.var wg sync.WaitGroup  
12.   
13.type reqinfo struct {  
14.    Code int  
15.    Success bool  
16.    Msg,RequestIp string  
17.    Data []map[string]interface{}  
18.}  
19.   
20.//api  
21.func getRes(url string) string{  
22.    defer func() {  
23.        err := recover()  
24.        if err != nil {  
25.            fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), "【http error】", "返回信息:", err)  
26.        }  
27.    }()  
28.    //获取代理  
29.    _, body, errs := gorequest.New().Get(url).End()  
30.    if errs != nil {  
31.        panic(errs)  
32.    }  
33.    return body  
34.}  
35.   
36.func ipcheck(url string,proxy string){  
37.    request := gorequest.New().Proxy(proxy)  
38.    _, body, errs := request.Get(url).  
39.        Set("User-Agent", `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36`).  
40.        End()  
41.    if errs != nil {  
42.        fmt.Println(errs)  
43.        //panic(errs)  
44.    }  
45.    fmt.Println(body)  
46.    defer wg.Done()  
47.    defer func() {  
48.        err := recover()  
49.        if err != nil {  
50.            fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), "【http error】", "返回信息:", err)  
51.        }  
52.    }()  
53.}  
54.   
55.func getiP(getipUrl string){  
56.    defer func() {  
57.        err := recover()  
58.        if err != nil {  
59.            fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), "【http error】", "返回信息:", err)  
60.        }  
61.    }()  
62.    body :=getRes(getipUrl)  
63.    fmt.Println(body)  
64.    //解决json  
65.    var info reqinfo  
66.    err := json.Unmarshal([]byte(body),&info)  
67.    if err != nil {  
68.        fmt.Println("json error",err)  
69.    }  
70.    for _,v := range info.Data{  
71.        IP := v["ip"]  
72.        port := v["port"]  
73.        proxyUrl := fmt.Sprint("http://",IP,":",port)  
74.        fmt.Println(proxyUrl)  
75.        url := "https://api.myip.la/en?json"  
76.        wg.Add(1)  
77.        go ipcheck(url,proxyUrl)  
78.    }  
79.    wg.Wait()  
80.}  
81.   
82.func main() {  
83.    getipUrl := "代理链接"  
84.    getiP(getipUrl)  
85.}  

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理