🌐 cURL 변환기 (fetch · axios · Python requests)
curl 명령을 붙여넣으면 JavaScript fetch, axios, Python requests 코드로 바꿔 줘요. 헤더·JSON 본문·Basic 인증을 처리해요.
// curl 명령을 붙여넣으면 여기에 코드가 나와요
사용법
- 왼쪽 입력창에 curl 명령 전체를 붙여넣어요. 브라우저 개발자 도구 Network 탭에서 요청을 우클릭해 "Copy as cURL"로 복사한 명령도 그대로 돼요. 줄 끝
\로 이어진 여러 줄 명령도 처리해요. - 위쪽 탭에서 fetch(JavaScript) / axios / Python requests 중 원하는 결과를 골라요. 결과는 바로 복사해서 프로젝트에 붙여넣을 수 있어요.
- 지원하지 않는 옵션이 있으면 결과 아래에 경고가 나와요. 그 부분만 직접 고쳐 주세요.
어떤 옵션을 변환하나요
| curl 옵션 | 의미 | 변환 방식 |
|---|---|---|
-X, --request | HTTP 메서드 | method 로 반영. 생략하면 데이터가 있을 때 POST, 없으면 GET |
-H, --header | 요청 헤더 | headers 객체로 (여러 번 써도 모두 반영) |
-d, --data, --data-raw | 요청 본문 | body(data) 문자열로. 여러 개면 &로 연결 |
--data-urlencode | URL 인코딩된 본문 | 값 부분을 인코딩해서 본문에 추가 |
-u user:pass | Basic 인증 | Authorization: Basic … 헤더로 변환 |
-G | 데이터를 쿼리로 | -d 값들을 URL 뒤 ?쿼리로 붙이고 GET |
-I | 헤더만 요청 | HEAD 메서드 |
-A, -e, -b | User-Agent, Referer, Cookie | 같은 이름의 헤더로 |
--compressed, -L, -k, -s, -v | 압축·리다이렉트·SSL 무시·출력 옵션 | 코드 동작과 무관해서 무시 (fetch는 리다이렉트를 기본으로 따라가요) |
-F, --data-binary @파일 | 멀티파트·파일 전송 | 변환하지 않고 경고만 표시 |
변환 예시
아래 명령은 JSON을 POST로 보내는 흔한 API 호출이에요. 입력창의 예시 버튼을 누르면 같은 내용이 채워져요.
curl 'https://api.example.com/v1/users' -H 'Content-Type: application/json' -H 'Authorization: Bearer TOKEN' --data-raw '{"name":"스미스","age":30}'
메서드는 -X가 없지만 데이터가 있어서 POST로 판단하고, fetch 결과는 다음과 같아요.
fetch("https://api.example.com/v1/users", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer TOKEN"
},
body: "{\"name\":\"스미스\",\"age\":30}"
})
.then((res) => res.text())
.then(console.log);
같은 명령을 Python requests로 바꾸면 이래요.
import requests
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer TOKEN"
}
data = "{\"name\":\"스미스\",\"age\":30}"
response = requests.post("https://api.example.com/v1/users", headers=headers, data=data)
print(response.text)
한글이 들어간 본문("스미스")도 깨지지 않고 그대로 옮겨져요. 다만 Python 코드의 data=는 문자열을 그대로 보내므로, 서버가 JSON을 기대하면 위 예시처럼 Content-Type: application/json 헤더가 같이 있는지 확인하세요. json= 인자로 바꾸고 싶다면 문자열 대신 딕셔너리를 넘기면 헤더가 자동으로 붙어요.
Basic 인증(-u)은 이렇게 바뀌어요
-u admin:secret은 "admin:secret"을 Base64로 인코딩한 Authorization: Basic YWRtaW46c2VjcmV0 헤더가 돼요. 이 값은 암호화가 아니라 단순 인코딩이라 누구나 풀 수 있어요. 그래서 실제 비밀번호나 API 키가 들어간 명령은 이 페이지에 붙여넣기 전에 가짜 값으로 바꾸는 습관을 들이는 게 좋아요. 이 도구는 입력을 서버로 보내지 않지만, 변환한 코드를 채팅·이슈·블로그에 올릴 때 키가 같이 노출되는 실수가 흔해요.
Copy as cURL에서 가져온 명령 정리하기
브라우저에서 복사한 cURL에는 sec-ch-ua, sec-fetch-*, accept-language, cookie 같은 헤더가 수십 줄 붙어 있어요. 이 헤더들은 대부분 브라우저가 자동으로 붙이는 것이라 서버에서 호출할 때는 필요 없는 경우가 많아요. 그리고 sec-로 시작하는 헤더나 Host, Origin은 브라우저의 fetch에서는 코드로 바꿀 수 없어요. 변환 후에는 인증에 꼭 필요한 헤더(Authorization, Cookie, Content-Type)만 남기고 하나씩 지워 가며 동작을 확인하는 게 깔끔해요.
자주 막히는 지점
- 브라우저에서 CORS 오류가 나요. curl은 CORS 제약이 없지만 브라우저의 fetch는 서버가 허용한 출처에서만 응답을 읽을 수 있어요. 변환한 코드는 Node.js나 서버에서 실행하거나, API 서버에서 CORS를 허용해야 해요.
- JSON 본문이 문자열로 들어가요. 변환 결과는 curl과 똑같이 문자열 그대로 보내요.
JSON.stringify(객체)형태로 바꾸고 싶다면 본문 문자열을 객체로 풀어 쓰면 돼요. - 따옴표가 섞인 명령: 작은따옴표 안의 큰따옴표는 그대로 두고, 큰따옴표 안에서는
\"·\$·\\를 해석해요. 윈도우 cmd 방식(^줄바꿈, 큰따옴표만 사용)도 어느 정도 처리하지만 복잡하면 오류가 날 수 있어요. - 쿼리 문자열의 &: URL에 &가 있다면 셸에서는 따옴표로 감싸야 해요. 붙여넣은 명령에 따옴표가 없으면 & 뒤가 잘릴 수 있으니 확인하세요.
- 파일 업로드(-F)는 FormData·multipart 처리가 필요해서 이 도구에서는 변환하지 않아요. 경고가 뜨면 라이브러리의 파일 업로드 예제를 참고하세요.
fetch, axios, requests 중 무엇을 쓸까
fetch는 브라우저와 Node.js 18 이상에 내장되어 추가 설치가 필요 없고, 그만큼 응답 처리(res.ok 확인, JSON 변환)를 직접 해야 해요. axios는 별도 설치가 필요하지만 JSON 자동 변환, 상태 코드에 따른 예외, 인터셉터, 타임아웃 설정이 편해요. Python requests는 서버·스크립트·데이터 작업에서 가장 흔히 쓰는 HTTP 라이브러리예요. 이 도구의 결과는 요청을 재현하는 최소 코드이니, 실제 서비스에 넣을 때는 오류 처리, 타임아웃, 재시도를 추가하세요.
curl 옵션 중 자주 쓰는 것만 변환하는 단순 변환기예요. 복잡한 요청(멀티파트, 클라이언트 인증서, 프록시 등)은 직접 확인이 필요해요. 입력한 명령은 이 브라우저 밖으로 나가지 않아요. curl 옵션은 curl 공식 매뉴얼에서 확인할 수 있어요. 요청 응답 코드가 궁금하면 HTTP 상태 코드 조회를 이용하세요.