电子说
如何在go语言代码中使用HTTP代理IP。
以下代码主要围绕第一次接触HTTP代理IP的go新手来写(步骤注释清晰)。
直接把下面示例代码中的HTTP代理API,替换成你后台生成的代理API链接,就可以跑起来了。
以下是一个示例代码,只是一个基础的演示,具体的代码还是要根据你业务的实际情况去写的。
示例代码中的HTTP代理IP,我使用的是华益云的HTTP代理API,注册就能白嫖1万个高匿爬虫IP,有效期是一年,对于调试代码来说这个时间是非常的友好。
华益云-企业级HTTP爬虫代理IP供应商-点我免费领取示例代码demo中同款10000个高匿IP
打开代理API,获取里面的IP,使用IP访问目标网站,其实代码中就是执行这个过程而已,然后加了几个错误判断有助于代码的稳定运行。(步骤注释清晰)
package main import ( "errors" "fmt" "io/ioutil" "log" "net/http" "net/url" "strings" "time" ) func main() { // 发送给服务器的标识 userAgent := "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/532.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36" // 代理api(这里我推荐使用www.9vps.com华益云的HTTP代理API,注册就送1万IP) proxyUrl := "http://http.9vps.com/getip.asp?username=166xxxx6597&pwd=xxxxbaa59ce237dff65134984b9cxxxx&geshi=1&fenge=1&fengefu=&Contenttype=1&getnum=20&setcity=&operate=all&" outPutProxy, _ := getProxy(proxyUrl, userAgent) if len(outPutProxy) == 0 { // 没有获取到代理 return } // 目标请求网站 url := "https://www.qq.com/" var out string = "" for i := 0; i < 3; i++ { // 最多尝试三次 px := outPutProxy[0] outPutProxy = append(outPutProxy[:0], outPutProxy[1:]...) fmt.Println("using proxy ", px) response, err := requestGet(url, userAgent, "http://"+px) out = fmt.Sprintf("%s", response) if err == nil { // 这里说明请求成功了,直接可以退出循环了 fmt.Println(out) break } else { if len(outPutProxy) == 0 { // 没有代理了再次获取下 outPutProxy, err = getProxy(proxyUrl, userAgent) if err != nil { log.Fatalln(err) } } } } // 最终的响应内容 fmt.Println(out) } func getProxy(proxyUrl string, userAgent string) ([]string, error) { var outPutProxy []string proxyIps, err := requestGet(proxyUrl, userAgent, "") fmt.Println(proxyIps) if err != nil { return outPutProxy, err } // {"code":3002,"data":[],"msg":"error!用户名或密码错误","success":false} if strings.Index(proxyIps, "{") > -1 { return outPutProxy, errors.New(proxyIps) } outPutProxy = strings.Split(proxyIps, "\r\n") fmt.Printf("总共获取了%d个代理\n", len(outPutProxy)) return outPutProxy, nil } func requestGet(reqUrl string, userAgent string, proxyAddr string) (string, error) { var client http.Client if proxyAddr != "" { // 有代理的情况 proxy, err := url.Parse(proxyAddr) if err != nil { return "", err } client = http.Client{ Timeout: 5 * time.Second, // 5秒最大超时 Transport: &http.Transport{Proxy: http.ProxyURL(proxy)}, } } else { client = http.Client{ Timeout: 5 * time.Second, // 5秒最大超时 } } // 创建新的Request对象 req, err := http.NewRequest("GET", reqUrl, nil) if err != nil { return "", err } // 设置请求头 req.Header.Set("user-agent", userAgent) // 向服务器发送请求 resp, err := client.Do(req) if err != nil { return "", err } // 读取响应内容 body, err := ioutil.ReadAll(resp.Body) if err != nil { return "", err } // 将响应内容转为string类型 response := string(body) return response, nil }
或者直接百度搜索:华益云HTTP代理
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !