NodeJS: 使用 Axios 实现 HTTP、HTTPS 和 SOCKS5 代理请求

ops/2024/10/30 6:07:09/
http://www.w3.org/2000/svg" style="display: none;">

在日常开发中,网络请求是不可避免的。通过使用代理服务器,可以更好地控制请求的来源、隐藏 IP 地址,或者绕过网络限制。在本篇文章中,我将分享如何使用 axios 库结合 HTTP、HTTPS 和 SOCKS5 代理来发送网络请求,并详细介绍实现过程。

准备工作

首先,我们需要确保项目中安装了必要的依赖,包括 axioshttp-proxy-agenthttps-proxy-agentsocks-proxy-agent。可以使用以下命令进行安装:

npm install axios http-proxy-agent https-proxy-agent socks-proxy-agent

安装完成后,就可以开始构建代码了。

代码实现

1. 导入必要的模块

我们首先导入 axios 库及相应的代理模块:

import axios from "axios";
import { HttpProxyAgent } from "http-proxy-agent";
import { HttpsProxyAgent } from "https-proxy-agent";
import { SocksProxyAgent } from "socks-proxy-agent";

这里我们使用 axios 作为 HTTP 客户端,用它来发送网络请求;而 http-proxy-agenthttps-proxy-agentsocks-proxy-agent 用于处理不同类型的代理协议。

2. 配置 HTTP 代理

我们通过 HttpProxyAgent 配置 HTTP 代理:

const http = () => {const httpAgent = new HttpProxyAgent("<http://127.0.0.1:7899>");httpAxios.defaults.httpAgent = httpAgent;httpAxios.defaults.proxy = true;httpAxios.get("http://ipinfo.io", {}).then((res) => {console.log(res.data);});
};
  • HttpProxyAgent("<http://127.0.0.1:7899>"):定义 HTTP 代理的地址。这里我们指定代理服务器位于本地的 7899 端口。
  • httpAxios.defaults.httpAgent:设置 axios 请求的 httpAgent,用于处理代理请求。
  • httpAxios.defaults.proxy = true:启用代理模式。
  • httpAxios.get("<http://ipinfo.io>"):发送 HTTP 请求,并输出响应内容。

3. 配置 HTTPS 代理

对于 HTTPS 请求,我们可以使用 HttpsProxyAgent

const https = () => {const httpsAgent = new HttpsProxyAgent("<http://127.0.0.1:7899>");httpsAxios.defaults.httpsAgent = httpsAgent;httpsAxios.defaults.proxy = false;httpsAxios.get("https://ipinfo.io", {}).then((res) => {console.log(res.data);});
};
  • HttpsProxyAgent("<http://127.0.0.1:7899>"):这里我们依然使用同一个代理地址。
  • httpsAxios.defaults.httpsAgent:为 HTTPS 请求设置 httpsAgent
  • httpsAxios.defaults.proxy = false:禁用内置的 axios 代理,因为我们手动定义了代理。

4. 配置 SOCKS5 代理

为了支持 SOCKS5 代理,我们需要使用 SocksProxyAgent

const socks5 = () => {const socks5Agent = new SocksProxyAgent("socks5://127.0.0.1:7898");socks5Axios.defaults.httpsAgent = socks5Agent;socks5Axios.defaults.proxy = false;socks5Axios.get("https://ipinfo.io").then((res) => {console.log(res.data);}).catch((err) => {console.log(err.message);});
};
  • SocksProxyAgent("socks5://127.0.0.1:7898"):定义 SOCKS5 代理地址。我们使用本地的 7898 端口。
  • socks5Axios.defaults.httpsAgent:将 socks5Agent 作为 axioshttpsAgent
  • socks5Axios.defaults.proxy = false:禁用 axios 自带的代理功能。

5. 执行代码

最后,我们将所有代理请求依次执行:

http();
https();
socks5();

完整代码

以下是完整的代码实现:

import axios from "axios";
import { HttpProxyAgent } from "http-proxy-agent";
import { HttpsProxyAgent } from "https-proxy-agent";
import { SocksProxyAgent } from "socks-proxy-agent";let httpAxios = axios;
let httpsAxios = axios;
let socks5Axios = axios;const http = () => {const httpAgent = new HttpProxyAgent("<http://127.0.0.1:7899>");httpAxios.defaults.httpAgent = httpAgent;httpAxios.defaults.proxy = true;httpAxios.get("http://ipinfo.io", {}).then((res) => {console.log(res.data);});
};const https = () => {const httpsAgent = new HttpsProxyAgent("<http://127.0.0.1:7899>");httpsAxios.defaults.httpsAgent = httpsAgent;httpsAxios.defaults.proxy = false;httpsAxios.get("https://ipinfo.io", {}).then((res) => {console.log(res.data);});
};const socks5 = () => {const socks5Agent = new SocksProxyAgent("socks5://127.0.0.1:7898");socks5Axios.defaults.httpsAgent = socks5Agent;socks5Axios.defaults.proxy = false;socks5Axios.get("https://ipinfo.io").then((res) => {console.log(res.data);}).catch((err) => {console.log(err.message);});
};http();
https();
socks5();

http://www.ppmy.cn/ops/129508.html

相关文章

React核心思维模型(一)

一、数据和视图分离&#xff0c;数据改变驱动视图更新 <div>Tom</div>如果我们想修改上述div盒子中的Tom为Jerry&#xff0c;应该怎样修改呢 在jquery中我们直接把界面元素抓过来修改 document.getElementsByTagName(div).item(0) Jerry 但在react中&#xf…

【CS61A 2024秋】Python入门课,全过程记录(持续更新中)

文章目录 基本介绍&#x1f44b;Week 1Wed WelcomeDisc00Lab 00: Getting Started准备工作动手&#xff01;拓展一下 Fri Functions开篇材料阅读HW 01: Functions, ControlQ1: A Plus Abs BQ2: Two of ThreeQ3: Largest FactorQ4: Hailstone Week 2MonLab01: HW 01: Functions,…

go语言静态资源打包——思悟项目技术3

思悟项目&#xff1a; golang qq邮件发送验证码——思悟项目技术1 go语言gin框架平滑关闭——思悟项目技术2 Go 语言默认情况下打包并不会将静态文件直接包含在可执行文件中。Go 编译器只会打包 .go 源代码文件&#xff0c;静态文件&#xff08;如 HTML、CSS、JS 或图片等&am…

jmeter自定义函数

jmeter本身带有很多内带的函数&#xff0c;功能很强大&#xff0c;但是更强大的是&#xff0c;jmeter还可以扩展&#xff0c;让用户自定义函数。 下面来看下自定义函数是怎么做的。 需要在org.apache.jmeter.functions包中&#xff0c;添加我们的自定义函数&#xff0c;函数模…

Bash、sh 和 Shell都弄混了?

在Linux和Unix系统中&#xff0c;Bash、sh 和 Shell 都与命令行解释器相关&#xff0c;但它们各自的含义和作用略有不同。以下是它们之间的关系和区别&#xff1a; Shell Shell 是一个通用术语&#xff0c;指的是操作系统中负责解释和执行用户命令的程序。它是用户与操作系统…

用网页制作安装包——解密微软那些使用网页的exe

我们见到的很多exe软件其实都是html做的ui 一、微软visual studio 安装解析 打开html文件 二、使用网页制作的软件很多 可牛&#xff0c;微软开发软件 win98桌面背景 常见的文件格式hta 三、hta 网页应用程序 HTA属性 播报 编辑 HTA与普通的网页结构差不多&#xff0c…

Apache POI—读写Office格式文件

Apache POI 是一个开源的 Java 库&#xff0c;用于读写 Microsoft Office 格式的文件&#xff0c;主要包括 Excel、Word 和 PowerPoint 等文档。POI 对 Excel 文件的支持最为完善&#xff0c;通过 POI 可以方便地进行 Excel 文件的创建、编辑、读取等操作。 1. Apache POI 简介…

【Java SpringIOC与ID随感录】 基于 XML 的 Bean 装配

前言 我们知道了 Spring 是⼀个开源框架&#xff0c;他让我们的开发更加简单。他⽀持⼴泛的应⽤场 景&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这也是 Spring 能够⻓久不衰的原因。 这里来举个例子&#xff1a; 开发业务逻辑层一般是&#xff1a;控制层、业务逻辑层、持久…