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 라이선스
첨부파일과 준비물
curl-8.22.0_1-win64-mingw.zip:
공식 x64 프로그램 원본. 압축 안의 bin, 문서와 라이선스 파일을 함께 보관합니다.
curl-http-api-korean-guide.zip:
한국어 HTML·텍스트 설명서, 공식 링크, 로컬 모의 서버, JSON 요청 예제와 PowerShell 명령 모음입니다.
Windows PowerShell 또는 PowerShell 7. 로컬 모의 서버 실습에는 별도 설치된 Python 3가 필요합니다. Python 설치파일은 포함하지 않았습니다.
프로그램 ZIP의 SHA-256은
7f23b039f6ea4197362d4468e1a0e71428201222e1bef3b680d5ef7b2aefb714
입니다.
공식 체크섬
과 대조했습니다. 설명서 ZIP의 해시와 실제 첨부파일은 게시 후 다시 확인합니다.
압축 해제 후 실행 경로 확인
프로그램 ZIP을 원하는 폴더에 풉니다. 예를 들어 압축 안의 최상위 폴더를
C:\Tools\curl
로 옮겼다면 실행파일은
C:\Tools\curl\bin\curl.exe
입니다.
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 적용
실행파일을 찾을 수 없음:
$curlPath
와 압축 안의 bin 폴더 위치를 확인합니다.
연결 실패:
모의 서버 창이 열려 있는지, 포트 8765가 사용 중인지 확인합니다. 충돌 시 서버와 요청 URL의 포트를 함께 바꿉니다.
HTTP 400:
payload.json
이 유효한 JSON인지, Content-Type과 파일 경로가 맞는지 확인합니다.
인증서 오류:
실제 HTTPS API에서는 서버 인증서·이름·시간·인증기관 구성을 확인합니다. 인증서 검증 해제를 해결책으로 고정하지 않습니다.
POST 후 Timeout:
서버에서 작업이 수행됐을 수 있습니다. 주문·설정 변경 요청을 곧바로 반복하기 전에 결과 조회나 API의 중복 방지 계약을 확인합니다.
이 자료는 HTTP 요청을 재현하는 실습입니다. 장치별 API의 주소·인증·명령 형식은 해당 문서를 따라야 합니다. 비밀번호나 토큰이 든 명령·상세 로그를 그대로 공유하지 않습니다.
