// Paste a cURL command on the left
// Paste a cURL command on the left
브라우저 개발자도구에서 복사한 요청을 바로 동작하는 코드로 바꿉니다. cURL 명령을 붙여넣으면 fetch, axios, Python requests, Go 코드가 나오고, 그 명령이 실제로 무엇을 보내는지도 함께 정리해 줍니다.
브라우저 개발자 도구나 API 문서에서 가져온 curl 명령에는 요청에 필요한 모든 것이 들어 있지만, 그 문법 그대로는 코드에 붙지 않습니다. 손으로 옮기다 보면 헤더가 빠지고 JSON 본문의 따옴표가 깨집니다.
이 도구는 curl 명령을 fetch, axios, 파이썬 requests, Go 코드로 바꾸면서 메서드·헤더·쿼리 파라미터·본문을 그대로 유지합니다. "cURL로 복사"가 만들어 내는 여러 줄 따옴표 형태도 처리합니다. Authorization 헤더와 쿠키도 그대로 옮겨지므로, 결과를 공유되는 곳에 붙여 넣기 전에 한 번 확인하는 편이 좋습니다.
cURL로 복사 기능의 가치는 실제로 성공한 요청을 헤더까지 통째로 담아 준다는 데 있습니다. 그것이 곧 위험이기도 합니다. 그렇게 만들어진 명령에는 브라우저가 보낸 모든 쿠키와 Authorization 헤더, 만료 전까지 살아 있는 세션 식별자가 들어 있습니다. 그것을 채팅이나 티켓, 공개 이슈에 붙여넣는 것은 그 자격 증명이 여는 모든 것을 넘겨주는 일입니다. 여기서 변환한 결과도 마찬가지입니다. 같은 값이 그대로 들어가므로, 공유되는 곳으로 코드를 옮기기 전에 지우는 편이 좋습니다.
손으로 옮길 때 대개 어긋나는 지점은 셸 인용 부호입니다. 작은따옴표 안의 JSON 본문은 문자 그대로라서 달러 기호나 백틱이 아무 의미도 갖지 않지만, 같은 본문을 큰따옴표로 감싸면 curl이 보기도 전에 셸이 먼저 치환합니다. 역슬래시로 이어 붙인 여러 줄 명령은 해석 전에 다시 합쳐야 하고, 윈도우는 줄 이음 문자도 인용 규칙도 다릅니다. 한 기계에서 복사한 명령이 다른 기계에서 실패하는 이유입니다. 패턴으로 대충 맞추지 않고 명령을 제대로 파싱하는 것이 본문을 온전히 옮기는 방법입니다.
옮겨 갈 언어마다 고유한 관용이 있고, 기계적 번역이라도 그것을 지켜야 합니다. fetch 는 JSON 콘텐츠 타입을 대신 붙여 주지 않고 4xx나 5xx 응답에서 예외를 던지지도 않으므로, 생성된 코드는 상태 코드를 명시적으로 확인합니다. axios 는 기본적으로 JSON을 파싱하고 오류 상태에서 거부하는, 정반대의 관례를 따릅니다. Python requests 는 직접 직렬화한 문자열 대신 json= 을 받고, Go 는 본문을 리더로 감싼 요청 객체를 따로 만들어야 합니다. 출력은 curl 옵션을 일대일로 옮기는 대신 각 언어의 방식을 따릅니다.
아니요. 해석과 코드 생성이 전부 브라우저 안에서 이루어지므로 붙여넣은 명령의 Authorization 헤더가 기기 밖으로 나가지 않습니다. 다만 어떤 도구든 운영 토큰을 붙여넣는 것은 조심하는 편이 좋습니다.
-F/--form 필드는 해석해서 자바스크립트에서는 FormData로, Python에서는 files=로 만들어 줍니다. 다만 cURL 명령만으로는 실제 파일 내용을 복원할 수 없으므로 파일 자체는 코드에서 직접 붙여야 합니다.
무엇이 인코딩되는지 보이고 변수로 바꾸기 쉽게 하기 위해서입니다. Python과 Go에서는 각 언어의 관용적인 방식인 auth=()와 req.SetBasicAuth()를 씁니다.