DT

cURL 명령어를 코드로 변환

cURL을 fetch·Axios·Python requests·Go 코드로 그대로 옮깁니다.

이 도구는 100% 브라우저에서 실행됩니다. 입력한 데이터는 서버로 전송되지 않습니다.

API 문서나 브라우저 개발자 도구에서 얻은 cURL 명령을 애플리케이션 코드로 옮기는 일은 단순하지만 실수가 잦습니다. 헤더 하나를 빠뜨리거나 따옴표 이스케이프를 잘못 옮기면 401이나 400이 돌아오고, 원인을 찾느라 시간이 사라집니다.

이 도구는 cURL 명령을 파싱해 메서드, URL, 헤더, 쿠키, 본문, 인증 정보를 구조화한 뒤 JavaScript fetch, Axios, Python requests, Go net/http, PHP cURL 코드로 변환합니다. 여러 줄 이어쓰기(\), 작은따옴표·큰따옴표 혼용, --data 계열 플래그 여러 개, -G 로 본문을 쿼리스트링으로 보내는 형태까지 처리합니다.

사용 방법

  1. cURL 명령 붙여넣기왼쪽에 cURL 명령을 붙여넣습니다. Chrome 개발자 도구의 Network 탭에서 요청을 우클릭해 Copy as cURL 로 복사한 결과를 그대로 넣으면 됩니다. curl 로 시작하지 않는 URL만 넣어도 GET 요청으로 인식합니다.
  2. 분석 결과 확인입력창 아래에 메서드와 URL이 배지로 표시되고, 페이지 하단 표에서 파싱된 헤더·쿠키·본문을 항목별로 확인할 수 있습니다. 여기서 빠진 항목이 있다면 원본 명령의 따옴표 짝이 맞는지 살펴보세요.
  3. 대상 언어 선택오른쪽 상단 탭에서 fetch, Axios, Python, Go, PHP 중 하나를 고릅니다. JSON 본문은 문자열이 아니라 실제 객체·딕셔너리 리터럴로 펼쳐지고, Python 출력에서는 true·nullTrue·None 으로 변환됩니다.
  4. 복사 후 정리복사 버튼으로 코드를 가져간 뒤, 하드코딩된 토큰이나 쿠키는 환경변수로 옮기세요. 생성된 코드는 그대로 실행 가능한 형태이지만 인증 정보가 그대로 담겨 있습니다.

자주 묻는 질문

Chrome의 'Copy as cURL' 결과를 그대로 넣어도 되나요?

네, 그것을 주 사용 사례로 삼아 만들었습니다.

다만 브라우저가 복사해 주는 명령에는 sec-ch-ua, sec-fetch-mode, user-agent 같은 브라우저 전용 헤더와 세션 쿠키가 모두 포함됩니다. 이 헤더들은 서버 간 호출에 필요하지 않고, 오히려 그대로 옮기면 의도치 않게 브라우저를 흉내 내는 코드가 됩니다. 변환 후 인증 헤더와 Content-Type 만 남기고 나머지는 지우는 것을 권합니다. Windows에서는 Copy as cURL (bash) 를 고르는 편이 파싱이 더 안정적입니다.

파일 업로드(`-F`) 명령도 변환되나요?

네. -F 'file=@/path/to/a.png' 처럼 @ 로 시작하는 값은 파일로 인식합니다.

fetch·Axios 출력에서는 FormData 를 만들어 append 하는 코드가 생성되지만, 브라우저에서는 로컬 경로로 파일을 읽을 수 없으므로 실제 File 객체(예: <input type="file"> 의 값)로 바꿔야 합니다. Python 출력은 open(path, "rb") 로 열도록 생성되어 그대로 동작합니다.

생성된 코드에 인증 토큰이 그대로 들어 있습니다.

입력한 명령에 있던 값을 그대로 옮기기 때문입니다. 변환은 브라우저 안에서만 일어나므로 값이 어디로 전송되지는 않습니다.

다만 그 코드를 저장소에 커밋하면 토큰이 히스토리에 영구히 남습니다. 커밋 전에 process.env.API_TOKEN, os.environ["API_TOKEN"] 같은 형태로 바꾸세요. 이미 커밋했다면 파일을 고치는 것만으로는 부족하고 해당 토큰을 폐기·재발급해야 합니다.

알아두면 좋은 개념

cURL 플래그가 뜻하는 것

-X 는 HTTP 메서드, -H 는 헤더, -d·--data 는 요청 본문, -F 는 multipart 폼, -u 는 Basic 인증, -b 는 쿠키를 지정합니다. -L 은 리다이렉트를 따라가고, -k 는 TLS 인증서 검증을 건너뜁니다.

-d 를 쓰면 메서드를 지정하지 않아도 자동으로 POST가 되고 Content-Type: application/x-www-form-urlencoded 가 기본값이 됩니다. JSON을 보낼 때 Content-Type 헤더를 빠뜨려 서버가 본문을 파싱하지 못하는 사고가 여기서 자주 발생합니다.

fetch와 Axios의 실질적 차이

fetch 는 브라우저와 최신 Node.js에 내장되어 있어 의존성이 없습니다. 다만 HTTP 오류 상태(404·500)에서 reject하지 않으므로 response.ok 를 직접 확인해야 하고, JSON 본문은 JSON.stringify 로 직접 직렬화해야 합니다.

Axios는 4xx·5xx에서 예외를 던지고, 객체를 그대로 넘기면 JSON 직렬화와 Content-Type 설정을 알아서 합니다. 인터셉터로 토큰 갱신 로직을 한곳에 모으기도 쉽습니다. 간단한 호출이라면 fetch로 충분하고, 공통 처리가 많은 클라이언트라면 Axios가 코드를 줄여 줍니다.

requests 라이브러리의 data와 json

Python requests 에서 data= 에 딕셔너리를 넘기면 폼 인코딩으로 전송되고, json= 에 넘기면 JSON으로 직렬화되며 Content-Type: application/json 헤더가 자동으로 붙습니다.

이 도구는 본문이 유효한 JSON일 때 json=payload 형태로 생성합니다. 문자열을 그대로 보내야 하는 특수한 경우에만 data= 를 쓰세요. 참고로 requests 는 표준 라이브러리가 아니므로 pip install requests 가 필요하며, 최신 코드에서는 httpx 를 쓰면 거의 같은 API로 비동기 호출까지 지원됩니다.

함께 쓰면 좋은 도구

최종 업데이트: 2026-08-12