curl 8.22.0 Windows ZIP 다운로드 및 사용법 (HTTP API·JSON·오류 응답 실습)

curl로 HTTP API 응답과 오류를 확인하기

curl은 명령줄에서 URL로 요청을 보내고 응답 본문·헤더·상태 코드를 확인하는 도구입니다. 장치의 HTTP API, 게이트웨이와 웹 서버를 점검할 때 같은 요청을 반복해서 재현하기 좋습니다. 이 글에는 공식 Windows x64 ZIP과 한국어 로컬 실습 ZIP을 첨부했습니다.

확인 기준: 2026년 9월 13일, 공식 Windows 빌드 8.22.0_1(curl 8.22.0). ARM64 PC는 공식 페이지에서 해당 빌드를 선택하세요. 첨부 x64 ZIP은 원본 그대로이며 포함된 저작권·라이선스 고지문을 보존했습니다. 공식 Windows 다운로드 · curl 라이선스

첨부파일과 준비물

프로그램 ZIP의 SHA-256은 7f23b039f6ea4197362d4468e1a0e71428201222e1bef3b680d5ef7b2aefb714입니다. 공식 체크섬과 대조했습니다. 설명서 ZIP의 해시와 실제 첨부파일은 게시 후 다시 확인합니다.

압축 해제 후 실행 경로 확인

  1. 프로그램 ZIP을 원하는 폴더에 풉니다. 예를 들어 압축 안의 최상위 폴더를 C:\Tools\curl로 옮겼다면 실행파일은 C:\Tools\curl\bin\curl.exe입니다.
  2. PowerShell에서 실제 실행파일 위치를 변수에 넣고 버전을 확인합니다. 아래 경로는 예시이므로 압축을 푼 위치에 맞게 바꿉니다.
$curlPath = 'C:\Tools\curl\bin\curl.exe'
& $curlPath --version

Windows 기본 curl이나 PowerShell 별칭과 혼동하지 않도록 전체 경로의 curl.exe를 지정합니다. --version 첫 줄에서 8.22.0을 확인하고 기능·프로토콜 목록도 함께 살펴봅니다. 시스템 PATH나 기본 프로그램을 바꾸지 않아도 실습할 수 있습니다.

내 PC에서만 동작하는 실습 서버 시작

설명서 ZIP을 별도 폴더에 풀고 해당 폴더에서 첫 번째 PowerShell 창으로 다음을 실행합니다. 모의 서버는 127.0.0.1:8765에만 바인딩하며 실제 장치·외부 서버를 제어하지 않습니다.

python mock_http_server.py

두 번째 PowerShell 창도 설명서 폴더에서 열고 $curlPath를 다시 설정합니다. JSON 파일은 UTF-8로 저장된 첨부 예제를 사용합니다. 실습을 끝내면 첫 번째 창에서 Ctrl+C를 누릅니다.

GET·POST·헤더·오류를 순서대로 확인

1. 상태 조회: 연결 제한과 전체 요청 제한을 설정하고 응답을 파일에 저장합니다. 성공하면 status.json에 학습용 장치 상태가 들어갑니다.

& $curlPath --silent --show-error --fail-with-body --connect-timeout 3 --max-time 10 --output status.json http://127.0.0.1:8765/status
Get-Content -LiteralPath status.json

2. JSON 전송: 파일을 그대로 전송해 셸의 따옴표 처리 차이를 줄입니다. /echo는 받은 내용을 응답할 뿐 영구 저장하지 않습니다.

& $curlPath --silent --show-error --fail-with-body --max-time 10 --header 'Content-Type: application/json' --data-binary '@payload.json' http://127.0.0.1:8765/echo

3. 응답 헤더 저장: 본문은 버리고 HTTP 헤더를 headers.txt에 저장합니다. HEAD를 별도로 구현하지 않은 서버도 있으므로 이 예제는 GET 요청을 유지합니다.

& $curlPath --silent --show-error --max-time 10 --dump-header headers.txt --output NUL http://127.0.0.1:8765/status
Get-Content -LiteralPath headers.txt

4. 오류 응답: 모의 서버의 /unavailable는 HTTP 503과 Retry-After: 2를 보냅니다. 아래 요청은 자동 재시도하지 않습니다. 오류 본문을 읽고 바로 다음 줄에서 종료 코드를 확인합니다.

& $curlPath --silent --show-error --fail-with-body --max-time 10 http://127.0.0.1:8765/unavailable
$LASTEXITCODE

이 실습에서는 HTTP 오류로 종료 코드 22가 나옵니다. 서버 미실행 등으로 연결 자체에 실패하면 다른 종료 코드가 나올 수 있습니다. HTTP 상태와 프로세스 종료 코드를 구분해 기록하세요. 옵션의 정확한 범위는 공식 curl 매뉴얼에서 확인할 수 있습니다.

문제 해결과 실제 API 적용

이 자료는 HTTP 요청을 재현하는 실습입니다. 장치별 API의 주소·인증·명령 형식은 해당 문서를 따라야 합니다. 비밀번호나 토큰이 든 명령·상세 로그를 그대로 공유하지 않습니다.