本 SuperAgent 代理指南涵盖以下主题:
- SuperAgent 是什么以及为什么需要代理。
- superagent-proxy 库是什么以及为什么需要它。
- 如何在 SuperAgent 中设置 HTTP、HTTPS 或 SOCKS 代理。
- 如何处理代理身份验证和 IP 轮换。
什么是 SuperAgent?为什么需要代理?
SuperAgent 是一个轻量级且易于使用的 JavaScript 应用程序 HTTP 客户端。 它的灵活性使其成为在前端和 Node.js 应用程序上发出 HTTP 请求的流行库。 它提供了许多功能,例如自定义标头、配置和 cookie。
为什么需要 SuperAgent 代理? 因为它可以让您保护您的在线身份并匿名行动。 通过代理服务器转发请求,可以隐藏您的 IP 地址,使目标服务器更难以识别和阻止您。 这种额外的保密层有助于避免 IP 禁令或限制。
请注意,您可以使用 Node Fetch(如我们node-fetch代理指南中所述)和 Axios(如我们的Axios 代理教程中所述)获得相同的结果。
什么是superagent代理?
SuperAgent 本身不支持代理。 考虑到代理支持的重要性,社区通过 superagent-proxy 解决了这个问题。 该 npm 包使用 proxy(uri) 函数扩展了 superagent Request 类,以设置 HTTP、HTTPS 或 SOCKS 代理。 换句话说,superagent-proxy 使您能够通过指定的代理来发送HTTP 请求。
在幕后,该库由 Proxy Agents 项目提供支持,该项目提供 http.Agent 实现来设置不同协议中的代理。
通过 superagent-proxy 在 SuperAgent 中设置代理
在此分步部分中,您将了解如何在 SuperAgent 中设置 HTTP、HTTPS 或 SOCKS 代理。
准备工作
假设您有一个 Node.js 项目。 首先,将 superagent 和 superagent-proxy npm 包添加到项目的依赖项中:
npm install superagent superagent-proxy
在 Node.js 脚本文件中,导入 superagent 函数并使用 superagent-proxy 对其进行扩展:
const superagent = require("superagent");
// extend the Request class from SuperAgent
// with the proxy() method
require("superagent-proxy")(superagent);
如果您是 ESM 用户,则如下所示:
import superagent from "superagent";
import superagentProxy from "superagent-proxy";
// extend the Request class from SuperAgent
// with the proxy() method
superagentProxy(superagent);
很好! 您已准备好遵循 SuperAgent 代理指南!
HTTP、HTTPS、SOCKS 代理
这是 HTTP/HTTPS/SOCKS 代理的 URL 语法:
[<PROXY_PROTOCOL>://]<PROXY_HOST>:<PROXY_PORT>
具体来说,参数为:
- :“http”表示 HTTP 代理,“https”表示 HTTPS 代理,“socks”、“socks4”、“socks5”表示不同 SOCKS 协议中的代理。 省略时,通常默认为“http”。
- <PROXY_HOST>:代理服务器或其域的 IP。
- <PROXY_PORT>:代理服务器监听的端口。
例如,假设这是您的 HTTP 代理的 URL:
"http://207.2.120.19:88"
您可以在 SuperAgent 中使用代理,如下所示:
try {
const proxyURL = "http://207.2.120.19:88";
const response = await superagent
.get("https://example.com")
.proxy(proxyURL);
// retrieve the JSON response from the request
// and print it
const jsonResponse = JSON.stringify(response.body);
console.log(jsonResponse);
} catch (e) {
console.error(e);
}
Or if you prefer a Promise-based approach:
const proxyURL = "http://207.2.120.19:88";
superagent
.get("https://example.com")
.proxy(proxyURL)
.end((err, res) => {
if (err) {
console.log(err);
} else {
const jsonResponse = JSON.stringify(res.body);
console.log(jsonResponse);
}
});
正如您所看到的,您所要做的就是将代理 URL 传递给 superagent-proxy 提供的 proxy() 方法。 SuperAgent 现在将通过 proxyURL 中指定的 HTTP 代理服务器对作为参数传递给 get() 的 URL 执行请求。
让我们通过一个完整的示例来验证上述 SuperAgent 代理方法是否有效!
完整示例
如果您没有代理服务器的 URL,您可以在线获取一个。 可以使用这个:
http://198.199.70.20:31028
这是一个HTTP proxy,,但请记住,您将看到的示例也适用于 HTTPS 或 SOCKS proxies。
为了验证 SuperAgent 通过指定代理路由请求,我们将以 HTTPBin 项目中的 /ip 端点为目标。 该公共 API 返回传入请求的 IP。 因此,如果一切按预期工作,HTTPBin API 应该使用代理服务器的 IP 进行响应。
完整的 JavaScript 代码片段如下所示:
const superagent = require("superagent");
require("superagent-proxy")(superagent);
async function makeProxyRequest() {
try {
const proxyURL = "http://198.199.70.20:31028";
const response = await superagent
.get("https://httpbin.io/ip")
.proxy(proxyURL);
const jsonResponse = JSON.stringify(response.body);
console.log(jsonResponse);
} catch (e) {
console.error(e);
}
}
makeProxyRequest();
执行脚本,它应该打印:
{ "origin": "198.199.70.20" }
极好的! 这是代理服务器的 IP,这意味着该方法可以按预期工作!
请注意,该措辞是故意的。 “应该打印”而不是“将打印”,因为免费代理的寿命很短,当您阅读本文时,所选代理将不再起作用。
使用在线检索的免费代理可以用于学习目的,但在真实项目中,则需要避免使用它们。 为什么? 因为免费代理服务速度慢、容易出错、不可靠、需要大量数据且寿命短暂。 如果你不想让项目遭遇麻烦和困难,应该避免它们!
如何解决这个问题? 使用市场上最好的代理提供商亮数据/Bright Data 提供的 优质代理。 创建一个帐户并免费尝试我们可靠的代理!
SuperAgent 代理:高级用例
以上为SuperAgent 代理集成的基础知识,你想了解更复杂的技术吗? 请按照以下章节操作,成为超级代理-代理专家。
通过环境变量全局设置代理?
SuperAgent 不支持全局配置,但不要忘记 superagent-proxy 在底层使用 proxy-agent。 proxy-agent 包有两种方法确定使用哪个代理:
- 它使用作为参数传递的 URL。
- 它读取 proxy-from-env 模块中定义的 HTTP_PROXY 和 HTTPS_PROXY 环境变量。
因此,您可以通过设置以下环境在 SuperAgent 中全局配置代理:
- HTTP_PROXY:用于 HTTP 请求的代理服务器的 URL。
- HTTPS_PROXY:用于 HTTPS 请求的代理服务器的 URL。
例如,使用以下命令在Linux或macOS上设置它们:
export HTTP_PROXY="[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]"
export HTTPS_PROXY="[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]"
然后,调用不带参数的 proxy() 方法:
superagent
.get("https://example.com")
.proxy()
// ...
非常好!SuperAgent 将为每个请求使用环境变量中指定的代理。
请点击链接了解更多信息,因为 cURL代理中也有相同的机制。
superagent-proxy 中的代理身份验证
代理服务商通过身份验证来保护其服务器。 这样,只有具有有效凭据的用户才能访问其代理服务器。 尝试在没有用户名和密码的情况下连接到经过身份验证的代理将失败,并出现需要代理身份验证的407 HTTP错误。
这是经过身份验证的代理URL的语法:
[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]
它就像常规代理的URL,但还涉及 和 。
为了更好地理解此机制的工作原理,上我们来看一个实际案例,假设下面的字符串是连接到经过身份验证的代理的 URL:
http://admin:[email protected]:8080
URL 的字段为:
- <PROTOCOL>:http
- <USERNAME>:管理员
<PASSWORD>
: pK5io86NWp56l9sju7<HOST>
: 20.210.113.32<PORT>
: 8080
鉴于此,SuperAgent 中有两种处理代理身份验证的方法:
- 直接在代理URL中指定凭据:
const proxyURL = "http://admin:[email protected]:8080"
superagent
.get("https://example.com")
.proxy(proxyURL)
// ...
- 在类似url-parse-like对象中设置用户名和密码属性:
superagent
.get("https://httpbin.io/ip")
.proxy({
protocol: "http",
host: "20.210.113.322",
port: "8080",
username: "admin",
password: "pK5io86NWp56l9sju7"
})
太好了,你学会亮SuperAgent 代理身份验证。
SuperAgent 中的轮换代理
如果您反复依赖同一个代理服务器,则存在目标站点阻止其 IP 地址的风险。 为了避免此问题,确保每个请求都源自不同的代理服务器至关重要。 您可以这样做:
- 填充代理 URL 列表。
- 在每次请求之前随机选择一个代理 URL。
- 在 SuperAgent 中配置所选的代理 URL。
但是,在每个 HTTP 请求之前管理此逻辑非常麻烦。 另外,它需要访问可靠的代理服务器池,这是有成本的。 幸运的是, 亮数据/Bright Data 提供了解决方案! 它的轮换代理会根据每个请求自动更改退出 IP 地址! 这些代理可确保每次连接都有新的IP地址,可在 195 个国家/地区使用,拥有出色的网络正常运行时间,并保证 99.9% 的成功率。
请阅读下一章,了解如何开始在 SuperAgent 中使用 Bright Data 的轮换代理 。
将 SuperAgent 与 Bright Data代理集成
Bright Data拥有世界上最好的代理服务器,为财富 500 强公司和超过 20,000 家客户提供服务。 其全球代理网络涉及:
- 机房代理 –超过 770,000 个数据中心 IP。
- 动态住宅代理– 覆盖195 个国家/地区的超过 7200 万个住宅 IP。
- ISP静态住宅 – 超过700,000个ISP静态IP。
- 移动代理 – 超过 700 万个移动IP。
总的来说,这是最大、最可靠的可用代理网络之一。 现在让我们看看如何在 SuperAgent 中集成 Bright Data 的代理。
如果您已有帐户,请登录 Bright Data。 否则,免费创建一个帐户。 您将有权访问以下用户仪表板:
点击“查看代理产品”按钮:
您将访问下面的“代理和抓取基础设施”页面:
向下滚动,找到“机房代理”卡,然后单击“开始”按钮:
您将到达机房代理配置仪表板。 为您的解决方案指定一个唯一的名称,并根据您的需求设置代理服务。 然后,按“添加”。如果您对如何配置代理有任何疑问,请随时联系 24/7 支持的客服。
最后,您将可以访问代理的主机名、端口、用户名和密码,如下所示:
请注意,“主机/Host”字段已包含端口。
这就是构建代理 URL 并在 SuperAgent 中使用它所需的全部内容。 将所有信息放在一起,并使用以下语法构建 URL:
<Username>:<Password>@<Host>
例如,在本案例中它如下所示:
brd-customer-hl_YYYYYYY-zone-datacenter_proxy1:@ZZZZZZZZZZbrd.superproxy.io:XXXX
用于 Bright Data 集成的 SuperAgent 代理片段如下所示:
const superagent = require("superagent");
require("superagent-proxy")(superagent);
async function makeBrightDataProxyRequest() {
try {
const proxyURL = "brd-customer-hl_YYYYYYY-zone-datacenter_proxy1:@ZZZZZZZZZZbrd.superproxy.io:XXXX";
const response = await superagent
.get("https://lumtest.com/myip.json")
.proxy(proxyURL);
const jsonResponse = JSON.stringify(response.body);
console.log(jsonResponse);
} catch (e) {
console.error(e);
}
}
makeBrightDataProxyRequest();
总结
在本 SuperAgent 代理教程中,您了解了为什么应该使用代理以及如何使用 superagent-proxy 进行操作。 您现在知道如何在强大的 JavaScript HTTP 客户端库 SuperAgent 中设置 HTTP、HTTPS 或 SOCKS 代理。 正如这里所证明的,这只需要几行代码!
通过本指南,您还了解了为什么永远不应该使用免费代理服务,市场上最好的代理网络提供商亮数据Bright Data 提供的可靠的代理服务器。 SuperAgent 中的集成过程是相同的,但高级代理的好处是无穷无尽的!