개발자

🌀 cURL 변환기

cURL 명령어를 fetch·axios·Python·Node·Go 5 언어로 즉시 변환. 한국 API 12개 예시.

⚠️ 본 도구의 cURL 파싱·코드 생성은 모두 브라우저에서 실행되며 입력 cURL·토큰·인증 정보는 외부로 전송되지 않습니다. 파일 업로드(@filename) · TLS 인증서(--cert) · 프록시(--proxy) 등 일부 옵션은 미지원이며 명시적으로 안내됩니다. 생성된 코드는 일반 케이스 가정 어림이며, 운영 환경 적용 전 반드시 테스트하세요. Authorization · API 키 등 민감 헤더는 코드 복사 후 환경 변수로 옮기는 것을 권장합니다. 분야별 안전 안내는 면책조항 참고.

🌀 cURL 명령 입력 (186 B)
POSThttps://api.example.com/users헤더 2body: json
⚙️ 출력 옵션
비동기 스타일 (JS)
🟨 JavaScript (fetch)
const 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)
🟦 JavaScript (axios)
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)
🐍 Python (requests)
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)
🟩 Node.js (http/https)
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()
🐹 Go (net/http)
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. 탭 1 변환 — cURL 붙여넣기 → 5개 언어 코드 동시 출력 (옵션: async/await·try/catch·민감 헤더 마스킹)
  2. 탭 2 요청 구조 — METHOD·URL·Query·Headers·Auth·Cookies·Body 시각 분해 + Content-Type 자동 감지
  3. 탭 3 예시 — 카카오·네이버·토스·쿠팡·GitHub·OpenAI·Slack·AWS·GraphQL·multipart 12개 카드, 클릭 시 자동 적용
  4. 탭 4 가이드 — cURL 옵션 치트시트(15+) + 5 언어 비교 + 미지원 옵션 + 보안 주의

💡 입력·옵션은 자동 저장됩니다. Chrome DevTools → Network → 우클릭 → Copy as cURL 그대로 붙여넣어도 동작합니다.

📖 cURL 옵션 치트시트 (15+)

본 도구가 지원하는 cURL 옵션 사전입니다. 모든 옵션은 짧은 형식·긴 형식 모두 인식합니다.

옵션긴 형식의미
-X--requestHTTP 메서드 (GET/POST/PUT/DELETE 등)
-H--header헤더 추가
-d--data본문 (POST 자동 전환)
--data-raw본문 (@ 파일 처리 X)
--data-urlencodeURL 인코드 본문
-F--formmultipart/form-data 폼
-u--userBasic Auth (user:pass)
-b--cookie쿠키
-A--user-agentUser-Agent 헤더
-e--refererReferer 헤더
-G--getdata를 query로 (GET)
-k--insecureSSL 검증 비활성 (정보용)
-L--location리다이렉트 따라가기 (정보용)
--compressedgzip 응답 받기 (정보용)
-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 (\) 지원하나요?
네, 완벽히 지원합니다. Chrome/Firefox DevTools의 "Copy as 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 변환?
GraphQL은 일반 HTTP POST + JSON body이므로 완벽히 변환됩니다.
예시 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 키 삭제 가능. 민감 토큰은 마스킹 옵션으로 코드에서 *** 처리하고, 실제 값은 환경 변수로 옮기는 것을 권장합니다.

함께 쓰면 좋은 도구

🔗

URL 인코더/디코더

인코드·쿼리 편집·추적 정리

📋

JSON 포맷터

JSON 정렬·압축·유효성

📄

YAML ↔ JSON

K8s·Spring·OpenAPI 예시