# 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** メニュー → **Automatic Setup** を選択します
2. **Open New Terminal** をクリックします
3. 必要に応じて、AppleScript の権限確認を許可します
4. 新しいターミナルウィンドウが開きます。そこで NodeJS のバックエンドサーバーを起動するか、スクリプトを実行してください。Proxyman がすべての通信を自動的にキャプチャします。
5. 例： 

```
$ npm start
```

完了 ✅

![Open New Terminal ボタンがあり、axios や fetch などの NodeJS ライブラリをキャプチャする Proxyman Automatic Setup のウィンドウ](https://proxyman.com/docs/assets/proxyman-automatic-setup-window.jpg)

_NodeJS の通信をキャプチャ_

Automatic Setup のページをご覧ください：

- [Proxyman の Automatic Setup](https://proxyman.com/docs/ja/automatic-setup/automatic-setup)

## 2. 旧方式（非推奨）❌ {#2-old-solution-not-recommended-}

NodeJS と Proxyman を併用する際によくある問題は次のとおりです：

### 1. NodeJS サーバーへの http://localhost:3000 リクエストを Proxyman でキャプチャできない {#1-proxyman-could-not-capture-httplocalhost3000-requests-to-my-nodejs-server}

NodeJS で localhost の Web サイト（例：http://localhost:3000）を配信している場合、Proxyman が機能しないことがあります。例えば、ExpressJS を使って http://localhost:3000 で API サーバーを配信している場合です。

#### 解決方法： {#solution}

[localhost サーバーからリクエストが一切見えない場合](https://proxyman.com/docs/ja/troubleshooting/couldnt-see-any-request-from-localhost-server)をご覧ください。

### 2. NodeJS のローカルサーバーから送信される HTTP リクエストを Proxyman でキャプチャできない {#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\. 次の環境変数を現在のシェルに追加します。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** をクリックします

![Listen on IP and port と Copy Shell Command 項目を表示した Proxyman のメニューバーメニュー](https://proxyman.com/docs/assets/Screenshot%202023-04-15%20at%2010.39.02.jpg)

3. ターミナルを開き、コマンドを貼り付けます。例：export https\_proxy=http://192.168.1.103:9090 http\_proxy=http://192.168.1.103:9090
4. 同じターミナルで、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 公式サイト）
