[使用介紹]GO語言如何測試ip代理?
GO語言如何檢測ip代理?有的時候我們找到的ip代理并非都是可用的,用過免費代理的就知道這個道理,而有些服務差的代理服務商,他們的IP質(zhì)量也堪憂。
我們使用爬蟲的時候需要大量代理,但是并不是所有的代理都是有效的。所以在使用代理前,我們應該先檢測下代理是否可用。
我們可以使用http.Transport設(shè)置代理來訪問某個測試地址,如果返回的狀態(tài)碼為200,說明這個代理是可用的。
為了提升代理檢測效率,測試地址盡量使用數(shù)據(jù)量比較小的站點:
例如:https://icanhazip.com 和 https://httpbin.org/get
package main
import (
"fmt"
"log"
"net/http"
"net/url"
"strings"
"time"
)
func ProxyTest(proxy_addr string) (Speed int, Status int) {
//檢測ip代理訪問地址
var testUrl string
//判斷傳來的ip代理是否是https
if strings.Contains(proxy_addr, "https") {
testUrl = "https://icanhazip.com"
} else {
testUrl = "http://icanhazip.com"
}
// 解析代理地址
proxy, err := url.Parse(proxy_addr)
//設(shè)置網(wǎng)絡傳輸
netTransport := &http.Transport{
Proxy: http.ProxyURL(proxy),
MaxIdleConnsPerHost: 10,
ResponseHeaderTimeout: time.Second * time.Duration(5),
}
// 創(chuàng)建連接客戶端
httpClient := &http.Client{
Timeout: time.Second * 10,
Transport: netTransport,
}
begin := time.Now() //判斷代理訪問時間
// 使用ip代理訪問測試地址
res, err := httpClient.Get(testUrl)
if err != nil {
log.Println(err)
return
}
defer res.Body.Close()
speed := int(time.Now().Sub(begin).Nanoseconds() / 1000 / 1000) //ms
//判斷是否成功訪問,如果成功訪問StatusCode應該為200
if res.StatusCode != http.StatusOK {
log.Println(err)
return
}
return speed, res.StatusCode
}
func main() {
var speed, status = ProxyTest("http://124.205.155.151:9090")
if status == 200 {
fmt.Println(speed, status)
} else {
fmt.Println("代理不可用")
}
}
如果大家需要穩(wěn)定能夠使用的ip代理,那么,IP海是大家最為合適的選擇之一,自建IP池,海量IP地址等你來。
版權(quán)聲明:本文為IP海(iphai.cn)原創(chuàng)作品,未經(jīng)許可,禁止轉(zhuǎn)載!
Copyright © www.wibm.ac.cn. All Rights Reserved. IP海 版權(quán)所有.
IP海僅提供中國內(nèi)IP加速服務,無法跨境聯(lián)網(wǎng),用戶應遵守《服務條款》內(nèi)容,嚴禁用戶使用IP海從事任何違法犯罪行為。
鄂ICP備19030659號-3
鄂公網(wǎng)安備42100302000141號
計算機軟件著作權(quán)證
ICP/EDI許可證:鄂B2-20200106