# 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 프록시 설정을 직접 하거나 자체 서명 인증서를 수동으로 신뢰할 필요가 없습니다.
* 여러 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
```

완료 ✅

![axios와 fetch 같은 NodeJS 라이브러리를 캡처하는 Open New Terminal 버튼이 있는 Proxyman Automatic Setup 창](https://proxyman.com/docs/assets/proxyman-automatic-setup-window.jpg)

_NodeJS 트래픽 캡처_

Automatic Setup 페이지를 확인하세요:

- [Automatic Setup](https://proxyman.com/docs/ko/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 웹사이트(예: http://localhost:3000)를 제공하면 Proxyman이 동작하지 않을 수 있습니다. 예를 들어 ExpressJS로 http://localhost:3000에 API 서버를 띄우는 경우가 이에 해당합니다.

#### 해결 방법: {#solution}

[localhost 서버에서 요청이 보이지 않는 경우](https://proxyman.com/docs/ko/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. 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}

* [NodeJS의 axios에서 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 웹사이트)
