본문으로 건너뛰기
AZ Tools

cURL → fetch / axios 변환

cURL 명령 붙여넣기 → 헤더·바디·메서드·기본인증까지 처리된 JS fetch / axios 코드.

타겟:
JS 코드
const response = await fetch("https://api.example.com/v1/users", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer abc123",
  },
  body: "{\"name\":\"Alice\",\"role\":\"admin\"}",
});
const data = await response.json();

사용법

  1. 입력 박스에 cURL 명령 붙여넣기.
  2. 타겟에 맞춰 fetch 또는 axios 선택.
  3. 결과 코드를 프로젝트에 복사.

자세한 설명

펼치기

cURL 명령을 붙여넣으면 바로 실행할 수 있는 자바스크립트가 나옵니다. 플랫폼 내장인 fetch와 axios 중에서 고를 수 있습니다. 메서드, 헤더, 여러 형태의 데이터, JSON, 기본 인증, 유저 에이전트, 쿠키 등 흔한 플래그를 이해하고, 역슬래시 줄 연결과 따옴표 문자열도 처리하므로 브라우저의 'cURL로 복사' 출력을 그대로 붙여 넣을 수 있습니다. 알아 둘 만한 변환이 두 가지 있습니다. 기본 인증은 user:pass의 Base64를 담은 Authorization 헤더가 됩니다. fetch에는 자격 증명을 받는 인자가 따로 없기 때문입니다. 그리고 쿠키 플래그는 Cookie 헤더가 되는데, Node에서는 괜찮지만 브라우저는 자바스크립트에서 이를 설정하는 것을 거부합니다. 쿠키는 브라우저가 관리하는 영역이므로, 페이지 안에서 호출한다면 대신 credentials: 'include'를 쓰세요.

자주 묻는 질문

cURL 명령은 어디서 얻나?

Chrome·Firefox·Safari DevTools → Network 탭 → 요청 우클릭 → Copy → Copy as cURL. Postman·Insomnia에도 비슷한 내보내기.

--json도 지원?

지원. --json 단축형은 바디 설정 + 기존에 없으면 Content-Type: application/json 및 Accept: application/json 헤더 추가.

-L·-s·-v는?

요청 페이로드를 바꾸지 않는 플래그는 무시 — fetch·axios는 기본으로 리다이렉트 따르며, 자세한 출력은 CLI만의 관심사.

axios 출력에서 바디가 data:인 이유?

axios는 요청 바디에 data 사용. 바디가 유효한 JSON으로 파싱되면 JS 객체 리터럴로 출력하지만, Content-Type이 JSON이거나 없을 때만. 폼 등 다른 Content-Type이거나 파싱되지 않으면 문자열 그대로 둠 — axios는 폼으로 보내는 객체를 URL 인코딩해 curl이 보내는 바이트와 달라지기 때문.

-d 옵션이 여러 번 나오면 어떻게 처리되나요?

&로 이어 붙여 하나의 본문으로 합칩니다. curl 자신이 그렇게 동작합니다. -d a=1 -d b=2는 본문 두 개도 아니고 a=1b=2도 아닌 a=1&b=2를 보냅니다. 데이터 계열 플래그 전체에 같은 규칙이 적용되므로, 한 명령에 -d와 --data-raw를 섞어도 합쳐진 본문 하나가 나옵니다. --data-urlencode는 curl과 같은 방식으로 퍼센트 인코딩합니다. name=value 형태라면 값 부분만 인코딩하므로 q=hello world는 q=hello%20world가 됩니다. -d 계열로 보낸 데이터에는 직접 지정하지 않는 한 curl처럼 Content-Type: application/x-www-form-urlencoded가 붙고, -G를 쓰면 합쳐진 데이터가 본문이 아니라 GET 요청의 쿼리 문자열로 들어갑니다.

-u가 아스키가 아닌 비밀번호에서도 동작하나요?

동작합니다. RFC 7617이 요구하는 대로 base64 전에 UTF-8로 인코딩합니다. 이 점을 밝혀 두는 이유는, 순진하게 브라우저의 btoa에 문자열을 그대로 넘기면 latin-1로 읽히기 때문입니다. 악센트가 들어간 비밀번호는 서버가 거부할 다른 바이트로 나오고, 한글이나 일본어처럼 U+00FF를 넘는 문자는 btoa가 아예 예외를 던집니다. curl에서는 로그인이 되는데 변환된 코드에서는 안 된다면 생성된 Authorization 헤더를 확인해 보세요.

관련 도구