请问 Nodejs 中 fetch 浏览器方法可以自定义 HTTP 代理吗?

发布于 1周前 作者 vueper 来自 nodejs/Nestjs

请问 Nodejs 中 fetch 浏览器方法可以自定义 HTTP 代理吗?
我把 Antd Pro 做的几个页面用 HBuilder 打包成了一个 APP,现在想要在设置里添加 HTTP 代理功能

于是我想着把 fetch 方法添加 proxy 属性,但是没有找到,貌似没这么个设置

我找了一些 node 包,比如: http-proxy-agent,用 node 直接执行脚本是走了我的代理的,写在 React 里则不走

我测试在 IE 里添加代理,fetch 默认就走代理了,看起来 fetch 请求的代理行为是由浏览器控制的,Chrome 浏览器又取了 IE 的系统代理配置

那么我的问题有如下一些:

1,fetch 确实不能通过手动指定 HTTP 代理在网页里使用吗
2,如果我想添加代理功能,改动量最小的方式是什么

先谢谢了


2 回复

挺有想象力的问题,回答是不行,但是既然是客户端,可以在客户端代码里实现代理一个轻量级的 http-server,然后浏览器请求本地接口


在 Node.js 环境中,fetch API 实际上是通过 node-fetch 或类似库提供的,而原生浏览器环境中的 fetch 方法并不直接适用于 Node.js。要在 Node.js 中使用 fetch 并自定义 HTTP 代理,你可以借助 node-fetchhttps-proxy-agent 库来实现。

以下是一个示例代码,展示了如何在 Node.js 中使用 fetch 并设置 HTTP 代理:

const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');

const proxy = 'http://your-proxy-server:port'; // 替换为你的代理服务器和端口
const url = 'https://example.com'; // 目标URL

const agent = new HttpsProxyAgent(proxy);

const options = {
  agent
};

fetch(url, options)
  .then(response => response.text())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

在这个示例中,我们首先引入了 node-fetchhttps-proxy-agent 库。然后,我们创建了一个 HttpsProxyAgent 实例,并传入代理服务器的地址。接着,我们将这个代理代理实例作为 agent 选项传递给 fetch 函数的第二个参数。这样,fetch 请求就会通过指定的代理服务器发送。

请确保你已经安装了 node-fetchhttps-proxy-agent 库,可以通过以下命令安装:

npm install node-fetch https-proxy-agent

希望这能帮助你解决问题!

回到顶部