개발자
🌀 cURL 변환기
cURL 명령어를 fetch·axios·Python·Node·Go 5 언어로 즉시 변환. 한국 API 12개 예시.
⚠️ 본 도구의 cURL 파싱·코드 생성은 모두 브라우저에서 실행되며 입력 cURL·토큰·인증 정보는 외부로 전송되지 않습니다. 파일 업로드(@filename) · TLS 인증서(--cert) · 프록시(--proxy) 등 일부 옵션은 미지원이며 명시적으로 안내됩니다. 생성된 코드는 일반 케이스 가정 어림이며, 운영 환경 적용 전 반드시 테스트하세요. Authorization · API 키 등 민감 헤더는 코드 복사 후 환경 변수로 옮기는 것을 권장합니다. 분야별 안전 안내는 면책조항 참고.
https://api.example.com/users헤더 2body: jsonconst response = await fetch("https://api.example.com/users", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "홍길동",
"email": "test@example.com"
})
})
const data = await response.json()
console.log(data)import axios from 'axios'
const response = await axios({
method: "post",
url: "https://api.example.com/users",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
data: {
"name": "홍길동",
"email": "test@example.com"
}
})
console.log(response.data)import requests
response = requests.post(
'https://api.example.com/users',
headers={
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
},
json={
"name": "홍길동",
"email": "test@example.com"
}
)
data = response.json()
print(data)const https = require('https')
const body = JSON.stringify({
"name": "홍길동",
"email": "test@example.com"
})
const url = new URL("https://api.example.com/users")
const options = {
hostname: url.hostname,
port: url.port || 443,
path: url.pathname + url.search,
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json",
'Content-Length': Buffer.byteLength(body)
}
}
const req = https.request(options, (res) => {
let chunks = []
res.on('data', (chunk) => chunks.push(chunk))
res.on('end', () => {
const data = Buffer.concat(chunks).toString()
console.log(JSON.parse(data))
})
})
req.write(body)
req.end()package main
import (
"fmt"
"io"
"net/http"
"bytes"
)
func main() {
body := bytes.NewReader([]byte(`{
"name": "홍길동",
"email": "test@example.com"
}`))
req, err := http.NewRequest("POST", "https://api.example.com/users", body)
if err != nil {
fmt.Println("Error:", err)
return
}
req.Header.Set("Authorization", "Bearer YOUR_TOKEN")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("Request failed:", err)
return
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(string(data))
}🛠️ 어떻게 사용하나요?
- 탭 1 변환 — cURL 붙여넣기 → 5개 언어 코드 동시 출력 (옵션: async/await·try/catch·민감 헤더 마스킹)
- 탭 2 요청 구조 — METHOD·URL·Query·Headers·Auth·Cookies·Body 시각 분해 + Content-Type 자동 감지
- 탭 3 예시 — 카카오·네이버·토스·쿠팡·GitHub·OpenAI·Slack·AWS·GraphQL·multipart 12개 카드, 클릭 시 자동 적용
- 탭 4 가이드 — cURL 옵션 치트시트(15+) + 5 언어 비교 + 미지원 옵션 + 보안 주의
💡 입력·옵션은 자동 저장됩니다. Chrome DevTools → Network → 우클릭 → Copy as cURL 그대로 붙여넣어도 동작합니다.
📖 cURL 옵션 치트시트 (15+)
본 도구가 지원하는 cURL 옵션 사전입니다. 모든 옵션은 짧은 형식·긴 형식 모두 인식합니다.
| 옵션 | 긴 형식 | 의미 |
|---|---|---|
-X | --request | HTTP 메서드 (GET/POST/PUT/DELETE 등) |
-H | --header | 헤더 추가 |
-d | --data | 본문 (POST 자동 전환) |
— | --data-raw | 본문 (@ 파일 처리 X) |
— | --data-urlencode | URL 인코드 본문 |
-F | --form | multipart/form-data 폼 |
-u | --user | Basic Auth (user:pass) |
-b | --cookie | 쿠키 |
-A | --user-agent | User-Agent 헤더 |
-e | --referer | Referer 헤더 |
-G | --get | data를 query로 (GET) |
-k | --insecure | SSL 검증 비활성 (정보용) |
-L | --location | 리다이렉트 따라가기 (정보용) |
— | --compressed | gzip 응답 받기 (정보용) |
-v | --verbose | 자세한 로그 (무시) |
🆚 5 언어 차이 — fetch · axios · Python · Node.js · Go
같은 cURL을 5개 언어로 변환할 때 각 환경의 특징·관용을 반영합니다.
🟨 fetch (Modern JS)
언제: 브라우저·Node 18+
✓ 내장, 표준
✗ JSON 자동 X (.json() 호출)
🟦 axios
언제: 구버전 브라우저·인터셉터 필요
✓ 인터셉터·자동 JSON·취소
✗ npm 의존성
🐍 Python requests
언제: 백엔드 스크립트·자동화
✓ 직관적, json= 자동
✗ 동기 (asyncio 별도)
🟩 Node.js http/https
언제: 의존성 없는 환경
✓ 내장, 가벼움
✗ 장황함, 콜백 패턴
🐹 Go net/http
언제: 백엔드·CLI
✓ 내장, 동시성
✗ Go 문법 학습 필요
⚠️ 미지원 옵션 안내
🚨 본 도구가 지원하지 않는 cURL 옵션 (생성 코드에 반영 X)
- 📁 파일 업로드 @filename —
-d @body.txt는 미지원, 단 multipart-F file=@photo.jpg는 지원 (placeholder 코드) - 🔐 TLS 인증서
--cert/--key/--cacert - 🌐 프록시
--proxy/--socks5 - 💾 파일 출력
-o/-O - 📤 업로드
-T/--upload-file - 📐 범위 다운로드
-r/--range - 🔍 DNS 오버라이드
--resolve/--connect-to
위 옵션이 cURL에 있으면 파싱 시 오렌지 박스로 명시되며, 생성된 코드에는 반영되지 않습니다. 수동 처리 필요.
🇰🇷 한국 API 자주 쓰는 시나리오
본 도구의 [📚 예시] 탭에 한국 백엔드 개발자가 자주 만나는 5개 API 예시가 준비되어 있습니다. 클릭 한 번으로 5 언어 코드 자동 생성.
- 💬 카카오 메시지 보내기 — Bearer 토큰 + form-urlencoded (talk_message API)
- 💬 카카오 OAuth 토큰 발급 — authorization_code → access_token
- 🇰🇷 네이버 검색 API — X-Naver-Client-Id/Secret 헤더 (블로그 검색)
- 💳 토스페이먼츠 결제 승인 — Basic Auth + JSON body (payments/confirm)
- 🛍️ 쿠팡 파트너스 검색 — HMAC-SHA256 서명 헤더 (제휴 상품)
💡 실제 사용 시 YOUR_TOKEN·YOUR_CLIENT_ID 등 placeholder를 환경 변수로 교체하세요. 예: Node.js process.env.KAKAO_TOKEN, Python os.environ["NAVER_CLIENT_ID"].
자주 묻는 질문 (FAQ)
Q1. fetch와 axios 어떤 게 더 좋나요?
상황에 따라 다릅니다.
fetch (권장):
• 브라우저·Node 18+ 내장 (의존성 0)
• 표준 Web API · 단순
• 단점: JSON 자동 변환 X (.json() 호출 필요), 인터셉터 X, 취소는 AbortController
axios:
• 인터셉터 (요청·응답 변환)·자동 JSON·진행률·취소 토큰·재시도 등 풍부한 기능
• 구버전 브라우저(IE) 지원
• 단점: npm i axios 의존성, 번들 크기 ↑
현대 프로젝트 (Next.js·Vite): fetch + 필요시 SWR/TanStack Query 조합 권장. axios는 인터셉터·재시도가 핵심일 때.
Q2. Python에선 requests vs httpx 차이?
requests:
• 가장 널리 쓰이는 HTTP 클라이언트 (2011~)
• 동기 (sync) 만 지원
• 단순, 직관적, 풍부한 문서
httpx:
• requests 호환 API + 동기·비동기 모두 지원
• HTTP/2 기본 지원
• FastAPI 등 비동기 프로젝트에 적합
본 도구는 requests 코드를 생성합니다 (가장 일반적). httpx 사용자는 import 부분만 변경하면 거의 호환:import httpx; httpx.post(...). 비동기는 httpx.AsyncClient() 사용.
Q3. Node.js fetch는 언제부터?
Node.js 18 (2022.04)부터 fetch가 전역으로 사용 가능 (node-fetch 패키지 불필요).
• Node 18~20: 실험적 (--experimental-fetch 플래그 없이 사용)
• Node 21+: 안정 stable
• Node 16 이하: npm i node-fetch 필요
본 도구의 fetch 코드는 Node 18+ 가정. 구버전이면:import fetch from 'node-fetch'
또는 axios·node http 코드를 사용하세요.
Q4. 다중 라인 cURL (\) 지원하나요?
예시:
curl 'https://api.example.com/data' \ -H 'accept: application/json' \ -H 'authorization: Bearer XXX' \ --compressed지원 형식:
•
\ + 개행 (셸 표준)•
\ + CRLF (Windows 친화)• 일반 한 줄
파서는 줄 이어짐을 공백으로 변환 후 토큰화합니다.
Q5. 파일 업로드(-F)는 변환되나요?
multipart 구조는 지원, 파일 자체는 placeholder입니다.
• -F "file=@photo.jpg" → 코드 생성: FormData에 파일 placeholder
• fetch / axios: formData.append('file', fileInput.files[0]) 형식 (브라우저 파일 입력 가정)
• Python: open('photo.jpg', 'rb') 자동 추가
• Node.js / Go: 주석으로 form-data 패키지 또는 mime/multipart 사용 안내
실제 파일 처리 코드는 사용자가 직접 추가해야 합니다 (환경별로 다름). 비-multipart 파일 (-d @body.txt)는 미지원이며 경고 표시.
Q6. Authorization 토큰을 안전하게 처리하려면?
핵심 원칙: 토큰을 코드에 직접 하드코딩 X, 환경 변수로 분리.
• JavaScript (브라우저): 절대 클라이언트 코드에 X. 백엔드 프록시 경유
• Node.js: process.env.API_TOKEN + .env 파일 (.gitignore)
• Python: os.environ['API_TOKEN'] + python-dotenv
• Go: os.Getenv("API_TOKEN") + .env
• CI/CD: GitHub Actions Secrets·GitLab CI Variables
• 운영: AWS Secrets Manager·Vault·Doppler 등 시크릿 매니저
본 도구의 마스킹 옵션을 켜면 코드 출력 시 ***로 표시되어 우연한 노출을 방지합니다.
Q7. multipart/form-data 변환?
-F 옵션이 multipart로 자동 변환됩니다.
• fetch / axios: FormData 객체 생성. Content-Type 헤더 직접 설정 금지 (boundary 자동 생성)
• Python: files= + data= 분리
• Node.js / Go: form-data 패키지 또는 mime/multipart 사용 안내
주의: cURL의 -F는 자동으로 Content-Type: multipart/form-data; boundary=...를 생성합니다. 사용자가 직접 -H로 Content-Type을 지정하면 boundary 누락으로 깨질 수 있어요. 본 도구는 multipart 시 Content-Type 헤더를 자동 제거합니다.
Q8. GraphQL cURL 변환?
예시 cURL:
curl -X POST 'https://api.github.com/graphql' \
-H 'Authorization: Bearer TOKEN' \
-d '{
"query": "query { viewer { login } }",
"variables": {}
}'본 도구의 탭 3 예시에서 GraphQL 카드를 적용해 보세요. query·variables 필드가 포함된 JSON이 5 언어로 변환됩니다.더 정교한 GraphQL 클라이언트(Apollo·urql·graphql-request)는 별도 라이브러리 사용 권장.
Q9. AWS S3 cURL 변환?
구조는 변환되지만, AWS Signature V4 서명은 사용자가 직접 처리해야 합니다.
• 본 도구: cURL의 헤더(Authorization V4·x-amz-content-sha256·x-amz-date)를 그대로 5 언어 코드로 옮김
• 실제 운영:
- JavaScript: @aws-sdk/client-s3 사용 (서명 자동)
- Python: boto3
- Go: aws-sdk-go-v2
본 도구는 학습·디버깅용이며 운영 환경에서는 SDK 사용 권장. 본 도구의 [📚 예시] 탭의 AWS S3 카드는 V4 서명 헤더 형식 참고용입니다.
Q10. 본 도구는 입력 데이터를 서버에 보내나요?
아니요. 모든 처리가 브라우저(클라이언트)에서 수행됩니다.
• cURL 파싱: 직접 작성한 토큰화 + 플래그 파서 (~500줄, 외부 라이브러리 0)
• 코드 생성: 템플릿 문자열 (서버 호출 0)
• Network 탭 확인: 변환 시 어떤 fetch/XHR도 발생하지 않음
• 입력은 localStorage에만 저장 (재방문 편의), 외부 전송 X
다만: 공용 PC·공유 기기에서 Authorization 토큰·API 키를 다룬 경우 사용 후 정리하세요. DevTools → Application → Local Storage에서 youtil_curl_v1 키 삭제 가능. 민감 토큰은 마스킹 옵션으로 코드에서 *** 처리하고, 실제 값은 환경 변수로 옮기는 것을 권장합니다.