使用Go语言通过API获取代理IP并使用获取到的代理IP

目录

前言

【步骤一:获取代理IP列表】

【步骤二:使用代理IP发送请求】

【完整代码】

【总结】



前言

在网络爬虫、数据抓取等场景中,经常需要使用代理IP来隐藏真实的IP地址,以及增加请求的稳定性和安全性。本文将介绍如何使用Go语言通过API获取代理IP,并使用获取到的代理IP,带有完整代码。

【步骤一:获取代理IP列表】

首先,我们需要找到一个可靠的代理IP提供商,提供API接口来获取代理IP列表。这里以“快代理”为例,其提供了免费的代理IP列表API,可以通过以下代码获取代理IP列表:

package mainimport ("fmt""net/http""io/ioutil"
)const proxyAPI = "https://www.zdaye.com"func getProxyIPList() ([]string, error) {resp, err := http.Get(proxyAPI)if err != nil {return nil, err}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {return nil, err}// 解析HTML获取代理IP列表// ...// 返回代理IP列表proxyIPList := []string{"1.1.1.1:8888", "2.2.2.2:8888", "3.3.3.3:8888"} // 假设获取到了3个代理IPreturn proxyIPList, nil
}func main() {proxyIPList, err := getProxyIPList()if err != nil {fmt.Println("获取代理IP列表失败:", err)return}fmt.Println("获取到的代理IP列表:")for _, ip := range proxyIPList {fmt.Println(ip)}
}

以上代码通过调用`http.Get()`方法请求代理IP列表的API接口,并获取到接口返回的HTML页面内容。然后,我们可以解析HTML页面获取到代理IP列表。这里为了简化流程,我们假设获取到了3个代理IP。

【步骤二:使用代理IP发送请求】

接下来,我们需要使用获取到的代理IP来发送HTTP请求。Go语言官方库`net/http`提供了`Transport`结构体可以方便地设置代理。

package mainimport ("fmt""net/http""net/url"
)const targetURL = "http://httpbin.org/ip"func main() {proxyIPList := []string{"1.1.1.1:8888", "2.2.2.2:8888", "3.3.3.3:8888"} // 假设获取到了3个代理IPfor _, proxyIP := range proxyIPList {proxyURL, _ := url.Parse("http://" + proxyIP)httpClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL),},}req, _ := http.NewRequest("GET", targetURL, nil)resp, err := httpClient.Do(req)if err != nil {fmt.Printf("使用代理IP %s 发送请求失败:%v\n", proxyIP, err)continue}// 处理响应// ...resp.Body.Close()}
}

以上代码通过循环遍历代理IP列表,每次使用一个代理IP发送HTTP请求。我们需要使用`url.Parse()`方法将代理IP转换为`url.URL`类型,并设置给`http.Client`的`Transport`属性。然后,通过`http.Client`发送请求并获取响应。

【完整代码】

以下是上述两个步骤的完整代码:

package mainimport ("fmt""net/http""io/ioutil""net/url"
)const proxyAPI = "https://www.zdaye.com/"
const targetURL = "http://httpbin.org/ip"func getProxyIPList() ([]string, error) {resp, err := http.Get(proxyAPI)if err != nil {return nil, err}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {return nil, err}// 解析HTML获取代理IP列表// ...// 返回代理IP列表proxyIPList := []string{"1.1.1.1:8888", "2.2.2.2:8888", "3.3.3.3:8888"} // 假设获取到了3个代理IPreturn proxyIPList, nil
}func main() {proxyIPList, err := getProxyIPList()if err != nil {fmt.Println("获取代理IP列表失败:", err)return}fmt.Println("获取到的代理IP列表:")for _, ip := range proxyIPList {fmt.Println(ip)}for _, proxyIP := range proxyIPList {proxyURL, _ := url.Parse("http://" + proxyIP)httpClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL),},}req, _ := http.NewRequest("GET", targetURL, nil)resp, err := httpClient.Do(req)if err != nil {fmt.Printf("使用代理IP %s 发送请求失败:%v\n", proxyIP, err)continue}// 处理响应// ...resp.Body.Close()}
}

【总结】

通过以上步骤,我们可以使用Go语言通过API获取代理IP,并使用获取到的代理IP发送HTTP请求。需要注意的是,不同的代理IP提供商可能有不同的API接口和代理IP格式,需要根据实际情况进行调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu22: nvtop no gpu to monitor.

解决方法: 重新下载nvtop sudo apt update sudo apt -y install nvtop真是逆天 ,ubuntu系统的nvidia driver突然坏了,然后我重装了nvidia driver, 之后用nvtop就出现这个问题了,但是逆天的是我竟然没有搜到一篇中文的帖子讲这个问…

NLP论文阅读记录 - 2021 | WOS 使用 GA-HC 和 PSO-HC 改进新闻文章的文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试 二.相关工作三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Improved Text Summa…

云卷云舒:2023年,我眼中的十大数据库

我眼中的十大数据库,只要看成长性和演进速度(个见勿怪)。 一、五强 1、openGauss:生态影响力变大,基于高斯的产品层出不穷 2、OceanBase:只因霸榜,技术强大,新特性更新频繁&#x…

lv14 并发控制:上下文、中断屏蔽和原子变量

1 上下文和并发场合 执行流:有开始有结束总体顺序执行的一段代码 又称上下文 应用编程:任务上下文 内核编程: 任务上下文:五状态 可阻塞 a. 应用进程或线程运行在用户空间b. 应用进程或线程运行在内核空间(通过调用…

python基础语法看一篇就够了,全网最全python语法笔记汇总

前言 Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。 如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极…

提前避坑Anzo Capital总结浮动差价的3个缺点

在交易中很多投资者倾向于选择浮动差价模式,这种模式的便利性就不言而喻了,但Anzo Capital需要提醒各位投资者,一定要知道浮动差价的3个缺点,在交易中提前避坑,下面Anzo Capital就和各位投资者一起总结浮动差价的这3…

leetcode 24两两交换链表中的节点

题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 思想 对于操作链表节点的时候,首先需要就是创建一个虚拟的…

前端动画特效分享(附在线预览)

分享几款不错的动画特效源码 其中有CSS动画、canvas动画、js小游戏等等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 canvas爱心代码动画 爱心代码动画特效 由里向外不断的产生的小爱心形成一个巨大的爱心动画 以下图片…

Maxwell数据同步(增量)

1. Maxwell简介 1.1 Maxwell概述 Maxwell 是由美国Zendesk公司开源,用Java编写的MySQL变更数据抓取软件。它会实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流…

全链路压力测试:现代软件工程中的重要性

全链路压力测试不仅可以确保系统在高负载下的性能和稳定性,还能帮助企业进行有效的风险管理和性能优化。在快速发展的互联网时代,全链路压力测试已成为确保软件产品质量的关键步骤。 1、测试环境搭建 测试应在与生产环境尽可能相似的环境中进行&#xff…

windows使用redis-安装和配置

windows使用redis 安装和配置 下载安装方式一-使用压缩包安装解压到指定的文件Redis安装为Windows服务安装成功 方式二-MSI安装包安装完成 Redis配置远程访问1.修改配置文件redis.windows.conf2.修改完redis配置文件,必须重启redis 下载 先下载Redis for windows 的…

Java lambda表达式如何自定义一个toList Collector

匿名类: package l8;import java.util.*; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collector; import java.util.s…

【PostgreSQL内核学习(二十二)—— 执行器(ExecutePlan)】

执行器(InitPlan) 概述ExecutePlan 函数ExecProcNode 函数 总结 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的情况下注明引用来…

超详细!4小时开发一个SpringBoot+vue前后端分离博客项目!!

超详细!4小时开发一个SpringBootvue前后端分离博客项目!! 前后端分离项目 文章总体分为2大部分,Java后端接口和vue前端页面,比较长,因为不想分开发布,真正想你4小时学会,哈哈。 先…

【自学笔记】01Java基础-07面向对象基础-04接口与内部类详解

记录学习Java基础中有关接口类和内部类的知识。 1 接口 interface 关键字用于定义接口类,接口类是一系列方法的声明,一般只有方法的特征没有方法的实现,因此可以被不同的类接入实现,而这些实现可以具有不同的行为(功…

Graham扫描凸包算法

凸包(Convex Hull)是包含给定点集合的最小凸多边形。凸包算法有多种实现方法,其中包括基于递增极角排序、Graham扫描、Jarvis步进法等。下面,我将提供一个简单的凸包算法实现,基于Graham扫描算法。 Graham扫描算法是一…

多级缓存架构(一)项目初始化

文章目录 一、项目克隆二、数据库准备三、项目工程准备 一、项目克隆 克隆此项目到本地 https://github.com/Xiamu-ssr/MultiCache 来到start目录下,分别有以下文件夹 docker:docker相关文件item-service:springboot项目 二、数据库准备 …

Ncast盈可视高清智能录播系统busiFacade RCE漏洞(CVE-2024-0305)

产品介绍 Ncast盈可视高清智能录播系统是一套新进的音视频录制和播放系统,旨在提供高质量,高清定制的录播功能。 漏洞描述 广州盈可视电子科技有限公司的高清智能录播系统存在信息泄露漏洞(CVE-2024-0305),攻击者可通过该漏洞,…

Sectigo的DV通配符https

Sectigo是近些年发展比较快速的CA认证机构,为了提升审核效率,在全国成立了审核机构,亚太审核中心的成立加快了Sectigo旗下的https证书的审核速度。Sectigo的https证书可以为网站安全提供有力支持,从而保护网站信息安全。今天就随S…

3、深入解析Redis Cluster集群运维与核心原理

在今天的大规模分布式系统中,Redis Cluster已经成为了许多企业选择的分布式缓存方案之一。了解Redis Cluster的运维及核心原理对于确保系统的高可用性和性能至关重要。本文将深入探讨Redis Cluster集群的运维细节和核心原理,以帮助读者更好地理解和优化R…