# NodeJS

> 使用 Proxyman Automatic Setup 抓取 NodeJS 应用和脚本的 HTTP/HTTPS 流量，兼容 axios、got、superagent、fetch 和 node-fetch。

## 1. 全新自动方案（v4.7.0 或更高版本）✅ {#1-new-automatic-solution-v470-or-later-}

Proxyman v4.7.0 或更高版本可以一键抓取 NodeJS 的 HTTP/HTTPS 流量。

* 一键方案：无需手动设置 HTTP Proxy，也无需手动信任自签名证书。
* 支持多种 NodeJS 库：axios、got、superagent、fetch 和 node-fetch

### 使用方法： {#how-to-use}

1. 打开 Proxyman -> Setup Menu -> Automatic Setup
2. 点击 “Open New Terminal”
3. 如有需要，请允许 AppleScript 的权限请求
4. 会打开一个新的 Terminal 窗口，在其中启动 NodeJS 后端服务或运行脚本，Proxyman 会自动抓取所有流量
5. 例如： 

```
$ npm start
```

完成 ✅

![Proxyman Automatic Setup 窗口，其中的 Open New Terminal 按钮可以抓取 axios、fetch 等 NodeJS 库的流量](https://proxyman.com/docs/assets/proxyman-automatic-setup-window.jpg)

_抓取 NodeJS 流量_

请查看 Automatic Setup 页面：

- [Automatic Setup（自动设置）](https://proxyman.com/docs/zh-cn/automatic-setup/automatic-setup)

## 2. 旧方案（不推荐）❌ {#2-old-solution-not-recommended-}

在 NodeJS 中使用 Proxyman 时，常见问题有以下几种：

### 1. Proxyman 无法抓取发往我的 NodeJS 服务器（http://localhost:3000）的请求 {#1-proxyman-could-not-capture-httplocalhost3000-requests-to-my-nodejs-server}

如果你使用 NodeJS 在本地提供网站（例如 http://localhost:3000），Proxyman 可能无法正常工作。例如：你使用 ExpressJS 在 http://localhost:3000 上提供 API 服务器。

#### 解决方案： {#solution}

请参阅 [无法看到本地服务器的任何请求](https://proxyman.com/docs/zh-cn/troubleshooting/couldnt-see-any-request-from-localhost-server)。

### 2. Proxyman 无法抓取由我的 NodeJS 本地服务器发出的 HTTP 请求。 {#2-proxyman-could-not-capture-http-requests-which-are-called-from-my-nodejs-local-server}

* 来自 [fetch](https://www.npmjs.com/package/node-fetch) 或 [axios](https://github.com/axios/axios) 的请求没有显示在 Proxyman 应用中
* HTTPS 请求出现 SSL 错误

#### 解决方案 {#solution-1}

默认情况下，NodeJS 库发出的 HTTP/HTTPS 请求不会经过 HTTP 代理服务器，因此 Proxyman 无法抓取这些流量。

#### 2.1 node-fetch {#21-node-fetch}

1. 安装 [global-agent](https://github.com/gajus/global-agent) 包

```bash
npm install global-agent
```

2\. 在 NodeJS 代码的顶部添加以下代码：

```javascript
import { bootstrap } from 'global-agent';
bootstrap();
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
```

3\. 在当前 shell 中添加此环境变量。确保 Proxyman 正在监听 9090 端口。

```
export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:9090
```

4\. 完成 ✅ 

再次运行 NodeJS 脚本，HTTP/HTTPS 请求就会出现在 Proxyman 应用中。

#### 示例代码 {#sample-code}

```javascript
import fetch from 'node-fetch';

// Setup global-agent
import { bootstrap } from 'global-agent';
bootstrap();
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

// fetch the data
const response = await fetch('https://httpbin.org/get?id=123');
const data = await response.json();

// Done
console.log(data);
```

#### 2.2 Axios {#22-axios}

根据 Axios 文档，可以设置 HTTP\_PROXY 和 HTTPS\_PROXY 环境变量。

1. 点击菜单栏中的 Proxyman 图标 -> Listen on \<IP>:\<Port>
2. 点击 “Copy Shell Command”

![Proxyman 菜单栏菜单，包含 Listen on IP and port 和 Copy Shell Command 选项](https://proxyman.com/docs/assets/Screenshot%202023-04-15%20at%2010.39.02.jpg)

3. 打开 Terminal 并粘贴该命令。例如：export https\_proxy=http://192.168.1.103:9090 http\_proxy=http://192.168.1.103:9090
4. 在同一个 Terminal 中，使用 axios 启动 NodeJS 服务器。
5. Axios 会将流量经由 Proxyman 发送。
6. 完成 ✅

#### 2.3 使用其他 NodeJS 库 {#23-i-use-a-different-nodejs-library}

如果你没有使用 fetch 或 axios，配置方法可能有所不同。请查阅所用库的文档，了解如何设置代理并信任 Proxyman 证书。

* 相关讨论见 [https://github.com/ProxymanApp/Proxyman/issues/236](https://github.com/ProxymanApp/Proxyman/issues/236)

## 了解更多 {#learn-more}

* [抓取 axios（NodeJS）的 HTTP/HTTPS 请求](https://proxyman.com/posts/2023-05-14-Capture-HTTP-HTTPS-Request-From-Axios-NodeJS)
* [使用 Proxyman 调试 NodeJS 中的 OpenAI API](https://proxyman.com/posts/2025-03-30-Debug-OpenAPI-NodeJS)
* [使用 Proxyman 抓取 NodeJS 的 HTTP/HTTPS 流量](https://proxyman.com/nodejs)（Proxyman 官网）
