cURL 파서
cURL 명령어 → URL·Method·Headers·Body 분해
📖 curl -d만 쓰고 -X 안 써도 POST로 잡히는 이유 가이드 보기
cURL 파서란?
cURL 명령어 문자열을 공백·따옴표 단위로 토큰화한 뒤 -X, -H, -d, -u 같은 플래그를 순서대로 스캔해 URL, HTTP 메서드, 헤더, 요청 본문으로 재구성합니다. 작은따옴표(')와 큰따옴표(")로 감싼 구간은 내부 공백을 그대로 보존한 채 하나의 토큰으로 처리하므로, -d '{"name":"Alice Kim"}'처럼 값 안에 공백이 있어도 깨지지 않습니다. 백슬래시(\)로 이어진 멀티라인 cURL은 파싱 전에 개행을 공백으로 치환해 한 줄로 합칩니다. 메서드는 -X/--request가 없으면 기본 GET이지만, -d/--data가 있고 -X가 명시되지 않았을 때는 실제 curl 바이너리와 동일하게 자동으로 POST로 판정합니다 — 이 자동판정 로직이 빠지면 "-d만 쓰고 -X는 생략"한 흔한 cURL 명령을 GET으로 잘못 표시하는 오류가 나므로, 도구를 직접 쓸 때도 method 필드가 왜 GET이 아닌 POST로 뜨는지 헷갈리지 않도록 알아두면 좋습니다. -u user:password는 Base64로 인코딩해 Authorization: Basic 헤더로 변환하는데, 비밀번호에 한글 등 non-Latin1 문자가 섞이면 브라우저 표준 btoa()가 바로 예외를 던지므로 UTF-8 바이트로 먼저 변환한 뒤 인코딩하도록 처리되어 있습니다.
자주 묻는 질문
어떤 cURL 옵션을 파싱하나요?
-X/--request, -H/--header, -d/--data, --data-raw, -u/--user, -L/--location, -k/--insecure, -v/--verbose를 인식합니다. 이 외의 옵션(예: --compressed, --retry)은 토큰만 건너뛸 뿐 별도 필드로 표시되지 않습니다.
-X 없이 -d만 쓰면 메서드가 어떻게 나오나요?
POST로 표시됩니다. 실제 curl은 -d/--data가 있으면 -X를 안 써도 자동으로 POST를 보내는데, 이 도구도 -X가 명시적으로 없고 body가 있을 때만 GET 기본값을 POST로 교정합니다. -X GET을 명시적으로 쓴 채 -d를 함께 쓰면(흔치 않지만 가능한 조합) 표시도 GET 그대로 유지됩니다.
Authorization 헤더와 Basic Auth(-u)는 어떻게 처리되나요?
-H 'Authorization: ...'로 직접 넣은 헤더는 그대로 표시되고, -u user:password는 "user:password" 문자열을 Base64 인코딩해 Authorization: Basic 값으로 자동 변환합니다. 비밀번호에 한글·이모지 등이 섞여도 UTF-8 인코딩 경로를 거쳐 깨지지 않고 변환됩니다.
JSON 본문이 있으면 예쁘게 표시되나요?
-d/--data-raw 값을 JSON.parse로 시도해 성공하면 2칸 들여쓰기로 재포맷합니다. 파싱에 실패하면(form-urlencoded, 순수 텍스트 등) 원본 문자열을 그대로 보여줍니다.
브라우저에서 복사한 cURL도 파싱되나요?
네. Chrome/Firefox 개발자 도구 Network 탭의 "Copy as cURL"로 복사한 명령어(대개 -H가 여러 줄로 나열된 형태)를 그대로 붙여넣으면 됩니다.
URL 쿼리 파라미터도 파싱되나요?
URL을 new URL()로 다시 파싱해 searchParams가 있으면 Query Params 항목으로 Key-Value 쌍을 따로 표시합니다.
파싱된 내용은 서버로 전송되나요?
아니요. 토큰화·정규식 매칭·Base64 인코딩 전부 브라우저 JavaScript 안에서만 실행되며, 입력한 cURL 명령(토큰 포함 인증 정보)은 네트워크로 전송되지 않습니다.
curl-generator.html과 어떻게 다른가요?
curl-generator는 폼 입력값으로 cURL 명령어를 새로 만들고, curl-parser는 이미 있는 cURL 명령어를 역으로 분해해 구조를 보여줍니다. 서로 반대 방향의 변환입니다.