package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
"time"
)
/*
验证代理ip是否可用
通过传入一个代理ip,然后使用它去访问一个url看看是否访问成功,以此为依据进行判断当前代理ip是否有效。
参数:proxy_addr 要验证的ip
返回:ip 验证通过的ip、status 状态(200表示成功)
*/
func ProxyThorn(proxy_addr string) (ip string,status int) {
//访问查看ip的一个网址
httpUrl := "http://icanhazip.com"
proxy, err := url.Parse(proxy_addr)
netTransport := &http.Transport{
Proxy:http.ProxyURL(proxy),
MaxIdleConnsPerHost: 10,
ResponseHeaderTimeout: time.Second * time.Duration(5),
}
httpClient := &http.Client{
Timeout: time.Second * 10,
Transport: netTransport,
}
res, err := httpClient.Get(httpUrl)
if err != nil {
log.Println(err)
return
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
log.Println(err)
return
}
c, _ := ioutil.ReadAll(res.Body)
return string(c),res.StatusCode
}
func main() {
//这里 http://192.168.16.40:61000 接口对应的真实代理ip为:182.139.184.116
var ip,status=ProxyThorn("http://192.168.16.40:61000")
fmt.Println("通过请求 http://icanhazip.com 返回的ip:"+ip)
var test_ip = "182.139.184.116\n"
//判断返回的ip是否和传入之前的ip相等,并且请求状态为200
if ip == test_ip && status==200{
fmt.Println("验证成功")
}else {
fmt.Println("验证失败")
}
}
运行结果如图: