# 모바일 포트 및 IP 로테이션

> LocalSERP Proxy API: 4G/5G 포트, IP 로테이션(즉시, 예약 또는 링크로 실행) 및 일일 트래픽. 매개변수, 응답 예시, curl, Python 및 Node.js 코드.

- URL: https://localserpproxy.com/ko/docs/api/mobile/
- 마지막 업데이트: 2026-10-15
- Publisher: LocalSERP Proxy (https://localserpproxy.com)

전용 4G/5G 포트: 지금 또는 예약한 시간에 IP를 변경하고, 로테이션 링크를 사용해 일일 트래픽을 확인하세요.

**이 페이지의 엔드포인트**

- `GET /v1/mobile`: 모바일 포트 목록
- `GET /v1/mobile/{portId}`: 모바일 포트 조회
- `PATCH /v1/mobile/{portId}`: 이름 변경, 자동 갱신 설정 또는 자동 로테이션 구성
- `POST /v1/mobile/{portId}/rotate`: 지금 IP 변경
- `GET /v1/mobile/{portId}/rotate`: 로테이션 링크 (쿼리 문자열에 API 키를 포함한 GET 요청)
- `POST /v1/mobile/{portId}/reset-password`: 포트의 새 프록시 비밀번호 생성
- `GET /v1/mobile/{portId}/usage`: 포트를 통한 일일 트래픽 (참고: 데이터 무제한, 공정 사용 정책 적용)
- `GET /v1/catalog/countries/{countryCode}/carriers`: 국가별 4G/5G 포트 이용 가능 모바일 통신사

기본 URL `https://localserpproxy.com/api/v1`. 인증, 오류 및 제한 사항은 [API 개요](https://localserpproxy.com/ko/docs/api/)를 참조하세요.

## 모바일 포트 목록

`GET /v1/mobile`

인증: `Authorization: Bearer API_KEY` 헤더에 API 키를 입력합니다.

**응답** `200 OK`

```json
{
  "data": [
    {
      "id": "mob_2v8k1q",
      "label": "US Verizon #1",
      "status": "active",
      "country": "US",
      "city": null,
      "carrier": "verizon",
      "carrierName": "Verizon",
      "networkType": "4G",
      "currentIp": "203.0.113.201",
      "ipChangedAt": "2026-10-05T14:03:11Z",
      "endpoint": {
        "host": "gw.localserpproxy.com",
        "httpPort": 7777,
        "socksPort": 7778
      },
      "username": "USERNAME",
      "password": "PASSWORD",
      "rotation": {
        "mode": "interval",
        "intervalMinutes": 10
      },
      "minRotationIntervalSeconds": 30,
      "rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
      "planId": "mob-us-30d",
      "autoRenew": false,
      "createdAt": "2026-10-05T14:03:11Z",
      "expiresAt": "2026-11-04T14:03:11Z"
    }
  ]
}
```

*curl*

```bash
curl -s "https://localserpproxy.com/api/v1/mobile" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.get(f"{API}/mobile", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/mobile`, {
  headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

## 모바일 포트 받기

`GET /v1/mobile/{portId}`

인증: `Authorization: Bearer API_KEY` 헤더에 API 키를 입력합니다.

**매개변수**

| 이름 | 위치 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- | --- |
| `portId` | path | string | 예 | — |

**응답** `200 OK`

```json
{
  "id": "mob_2v8k1q",
  "label": "US Verizon #1",
  "status": "active",
  "country": "US",
  "city": null,
  "carrier": "verizon",
  "carrierName": "Verizon",
  "networkType": "4G",
  "currentIp": "203.0.113.201",
  "ipChangedAt": "2026-10-05T14:03:11Z",
  "endpoint": {
    "host": "gw.localserpproxy.com",
    "httpPort": 7777,
    "socksPort": 7778
  },
  "username": "USERNAME",
  "password": "PASSWORD",
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  },
  "minRotationIntervalSeconds": 30,
  "rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
  "planId": "mob-us-30d",
  "autoRenew": false,
  "createdAt": "2026-10-05T14:03:11Z",
  "expiresAt": "2026-11-04T14:03:11Z"
}
```

*curl*

```bash
curl -s "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.get(f"{API}/mobile/mob_2v8k1q", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q`, {
  headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

## 이름 변경, 자동 갱신 켜기/끄기 또는 자동 IP 변경 설정

`PATCH /v1/mobile/{portId}`

포트 이름을 변경하고, 자동 갱신을 켜거나 끄거나, 2분마다부터 24시간마다까지 자동 IP 변경 간격을 설정하세요: `"rotation": { "mode": "interval", "intervalMinutes": 10 }` (2~1440분). `"mode": "manual"`은 기능을 끕니다. 설정하지 않으면 IP를 직접 변경할 때까지 포트가 현재 IP를 유지하지만, 통신사가 때때로 자체적으로 IP를 변경할 수 있습니다.

인증: `Authorization: Bearer API_KEY` 헤더에 API 키를 입력합니다.

**매개변수**

| 이름 | 위치 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- | --- |
| `portId` | path | string | 예 | — |

**요청 본문**

| 필드 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- |
| `label` | string | 아니요 | 최대 60자 |
| `autoRenew` | boolean | 아니요 | — |
| `rotation` | object | 아니요 | 자동 IP 변경 간격: `{ "mode": "interval", "intervalMinutes": 2–1440 }` (2분마다부터 24시간마다까지), 또는 필요할 때만 IP를 변경하려면 `{ "mode": "manual", "intervalMinutes": null }`. |

*예시: 자동 IP 변경*

```json
{
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  }
}
```

*예시: 수동*

```json
{
  "rotation": {
    "mode": "manual",
    "intervalMinutes": null
  }
}
```

**응답** `200 OK`

```json
{
  "id": "mob_2v8k1q",
  "label": "US Verizon #1",
  "status": "active",
  "country": "US",
  "city": null,
  "carrier": "verizon",
  "carrierName": "Verizon",
  "networkType": "4G",
  "currentIp": "203.0.113.201",
  "ipChangedAt": "2026-10-05T14:03:11Z",
  "endpoint": {
    "host": "gw.localserpproxy.com",
    "httpPort": 7777,
    "socksPort": 7778
  },
  "username": "USERNAME",
  "password": "PASSWORD",
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  },
  "minRotationIntervalSeconds": 30,
  "rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
  "planId": "mob-us-30d",
  "autoRenew": false,
  "createdAt": "2026-10-05T14:03:11Z",
  "expiresAt": "2026-11-04T14:03:11Z"
}
```

*curl*

```bash
curl -s -X PATCH "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"rotation":{"mode":"interval","intervalMinutes":10}}'
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.patch(f"{API}/mobile/mob_2v8k1q", headers=HEADERS, json={"rotation": {"mode": "interval", "intervalMinutes": 10}}, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q`, {
  method: 'PATCH',
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ rotation: { mode: 'interval', intervalMinutes: 10 } }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

## 지금 IP 변경

`POST /v1/mobile/{portId}/rotate`

IP를 변경할 때마다 포트가 통신사에 다시 연결되어 새 IP를 받으며, 보통 5~15초가 걸립니다. 통신사가 가끔 같은 IP를 다시 할당할 수 있습니다. 이 경우 다시 IP를 변경하세요. 포트별로 30초에 최대 1회까지 가능합니다(`minRotationIntervalSeconds`). 너무 빨리 요청하면 `429 rotation_too_soon`이 반환되며, `Retry-After`초 기다려야 합니다.

인증: `Authorization: Bearer API_KEY` 헤더에 API 키를 입력합니다.

**매개변수**

| 이름 | 위치 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- | --- |
| `portId` | path | string | 예 | — |

**응답** `200 OK`

```json
{
  "ip": "203.0.113.201",
  "previousIp": "203.0.113.77",
  "rotatedAt": "2026-10-05T14:03:11Z",
  "nextRotationAvailableAt": "2026-10-05T14:03:41Z"
}
```

*curl*

```bash
curl -s -X POST "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.post(f"{API}/mobile/mob_2v8k1q/rotate", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/rotate`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

## IP 변경 링크 (쿼리 문자열에 API 키를 넣어 GET 요청)

`GET /v1/mobile/{portId}/rotate`

`POST`과 동일하며, 스크립트와 북마크에서 사용할 수 있습니다: `GET https://localserpproxy.com/api/v1/mobile/{portId}/rotate?key=API_KEY`. 키에 `proxies` 범위가 필요합니다. `format=text`은 새 IP를 `text/plain`로 반환합니다.

인증: `key` 쿼리 매개변수(범위 `proxies`)에 API 키를 입력합니다. 따라서 북마크에서 링크를 열 수 있습니다.

**매개변수**

| 이름 | 위치 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- | --- |
| `key` | query | string | 예 | API 키 (범위 `proxies`). |
| `portId` | path | string | 예 | — |
| `format` | query | `json` · `text` | 아니요 | 기본 `json` |

**응답** `200 OK`

```json
{
  "ip": "203.0.113.201",
  "previousIp": "203.0.113.77",
  "rotatedAt": "2026-10-05T14:03:11Z",
  "nextRotationAvailableAt": "2026-10-05T14:03:41Z"
}
```

*curl*

```bash
curl -s "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=$API_KEY&format=text"
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"

r = requests.get(f"{API}/mobile/mob_2v8k1q/rotate", params={"key": os.environ["API_KEY"], "format": "text"}, timeout=30)
r.raise_for_status()
print(r.text)
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/rotate?key=${process.env.API_KEY}&format=text`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.text());
```

## 포트의 새 프록시 비밀번호 생성

`POST /v1/mobile/{portId}/reset-password`

인증: `Authorization: Bearer API_KEY` 헤더에 API 키를 입력합니다.

**매개변수**

| 이름 | 위치 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- | --- |
| `portId` | path | string | 예 | — |

**응답** `200 OK`

```json
{
  "id": "mob_2v8k1q",
  "label": "US Verizon #1",
  "status": "active",
  "country": "US",
  "city": null,
  "carrier": "verizon",
  "carrierName": "Verizon",
  "networkType": "4G",
  "currentIp": "203.0.113.201",
  "ipChangedAt": "2026-10-05T14:03:11Z",
  "endpoint": {
    "host": "gw.localserpproxy.com",
    "httpPort": 7777,
    "socksPort": 7778
  },
  "username": "USERNAME",
  "password": "PASSWORD",
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  },
  "minRotationIntervalSeconds": 30,
  "rotationLink": "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
  "planId": "mob-us-30d",
  "autoRenew": false,
  "createdAt": "2026-10-05T14:03:11Z",
  "expiresAt": "2026-11-04T14:03:11Z"
}
```

*curl*

```bash
curl -s -X POST "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/reset-password" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.post(f"{API}/mobile/mob_2v8k1q/reset-password", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/reset-password`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

## 포트를 통한 일일 트래픽(참고: 공정 사용 정책에 따라 데이터 무제한)

`GET /v1/mobile/{portId}/usage`

참고용입니다. 전용 포트에서 공정 사용 정책에 따라 데이터를 무제한으로 사용할 수 있습니다. 사용량이 매우 많으면 통신사가 속도를 낮추거나 일시 중지할 수 있습니다.

인증: `Authorization: Bearer API_KEY` 헤더에 API 키를 입력합니다.

**매개변수**

| 이름 | 위치 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- | --- |
| `portId` | path | string | 예 | — |
| `from` | query | string (date) | 아니요 | 첫째 날(UTC), 해당 날짜 포함. 기본값 = `to`보다 29일 전. |
| `to` | query | string (date) | 아니요 | 마지막 날(UTC), 해당 날짜 포함. 기본값 = 오늘. 최대 기간 366일. |

**응답** `200 OK`

```json
{
  "from": "2026-10-04",
  "to": "2026-10-05",
  "totalBytes": 2350000000,
  "totalRequests": 48210,
  "points": [
    {
      "date": "2026-10-04",
      "bytes": 1200000000,
      "requests": 24800
    },
    {
      "date": "2026-10-05",
      "bytes": 1150000000,
      "requests": 23410
    }
  ],
  "byCountry": [
    {
      "country": "US",
      "bytes": 2350000000
    }
  ]
}
```

*curl*

```bash
curl -s "https://localserpproxy.com/api/v1/mobile/mob_2v8k1q/usage" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.get(f"{API}/mobile/mob_2v8k1q/usage", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/usage`, {
  headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

## 국가별 4G/5G 포트 사용 가능 모바일 통신사

`GET /v1/catalog/countries/{countryCode}/carriers`

공개: API 키가 필요하지 않습니다.

**매개변수**

| 이름 | 위치 | 유형 | 필수 | 설명 |
| --- | --- | --- | --- | --- |
| `countryCode` | path | string | 예 | ISO 3166-1 alpha-2, 대문자. |

**응답** `200 OK`

```json
{
  "data": [
    {
      "id": "verizon",
      "name": "Verizon",
      "networkTypes": [
        "4G",
        "5G"
      ],
      "available": true,
      "cities": []
    }
  ]
}
```

*curl*

```bash
curl -s "https://localserpproxy.com/api/v1/catalog/countries/US/carriers"
```

*Python*

```python
import os
import requests

API = "https://localserpproxy.com/api/v1"

r = requests.get(f"{API}/catalog/countries/US/carriers", timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://localserpproxy.com/api/v1';

const res = await fetch(`${API}/catalog/countries/US/carriers`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

---

LocalSERP Proxy: LocalSERP Proxy는 도시별로 지역 검색 결과, 광고와 가격을 확인하는 미국 레지덴셜 프록시 서비스로, 암호화폐로 결제하며 신분증 업로드가 필요 없습니다.
