TL;DR
- Hurl은 간단한 일반 텍스트 형식으로 정의한 HTTP 요청을 실행하고, 여러 요청을 연결하거나 응답을 검사하는 명령줄 도구임.
- 헤더와 본문에서 값을 캡처하고 XPath, JSONPath, 상태 코드, 응답 헤더, 쿠키, 바이트, 인증서 등을 검증함.
- REST/JSON, HTML, GraphQL, SOAP/XML을 비롯해 일반 텍스트와 바이너리 요청 본문을 처리함.
- Rust로 작성된 단일 바이너리이며, 내부 HTTP 엔진은 libcurl 기반으로 빠르고 효율적이며 IPv6/HTTP/3를 지원함.
- 로컬 개발과 지속적 통합에 사용할 수 있으며, 텍스트·JUnit·TAP·HTML 보고서를 제공하고 HTTP 엔드포인트의 응답 시간도 검사함.
Hurl이란?
- Hurl은 간단한 일반 텍스트 형식으로 정의한 HTTP 요청을 실행하는 명령줄 도구임.
- 요청을 연결하고 응답 헤더와 본문에서 값을 캡처하며 쿼리를 평가함. 데이터 가져오기와 HTTP 세션 테스트 모두에 사용할 수 있음.
- HTML 콘텐츠, REST/SOAP/GraphQL API 및 XML/JSON 기반 API를 처리함.
- 예제에서 다루는 기능은 요청 헤더, 요청 연결, 쿼리 매개변수, 기본 인증, 폼, 멀티파트, 쿠키, 데이터 캡처, JSON 본문, SOAP/XML 본문, GraphQL, 텍스트 본문, 바이너리 본문, 응답 헤더, 상태 코드·HTTP 버전·XPath·JSONPath·Set-Cookie·바이트 테스트, SSL/TLS 인증서, 재시도, IP 주소임.
- 예제에서는
GET https://example.org응답에서 XPath로 CSRF 토큰을 캡처한 뒤POST https://example.org/login폼에{{csrf_token}}을 넣어 요청을 연결함. - 요청 헤더와 쿼리 매개변수, 기본 인증, 폼·멀티파트 본문, 쿠키, JSON·SOAP/XML·GraphQL·텍스트·바이너리 본문을 요청에 지정할 수 있음. 예시 요청 대상에는
https://example.org/news,https://example.org/api/health,https://example.org/api/step1,https://example.org/api/step2,https://example.org/api/step3,https://example.org/protected,https://example.org/contact,https://example.org/upload,http://localhost:8000/cookies/set-multiple-request-cookies,https://example.org/index.html,https://example.org/api/dogs,https://example.org/InStock,https://example.org/starwars/graphql,https://example.org/models,https://example.org,https://example.org/order/435,https://example.org/http3,https://example.org/http2,https://example.org/api/tests/4567,http://myserver.com/home,https://example.org/data.tar.gz,https://example.org/data.bin,https://api.example.org/jobs/{{job_id}}가 포함됨. - 요청 본문 예시에는
application/soap+xml; charset=utf-8과SOAPAction: "http://www.w3.org/2003/05/soap-envelope"헤더가 있으며, SOAP 네임스페이스는http://www.w3.org/2003/05/soap-envelope,http://example.net임. GraphQL 요청은 인간의 이름·등장 작품·키를 조회하고, JSON·CSV·Base64 데이터 또는 파일도 전송함. - 응답 예시는 상태 코드와
Location헤더, HTTP/2·HTTP/3 버전, HTML 제목·문단 수, JSON 필드와 정규식, 쿠키 속성, SHA-256 및 바이트 접두부, TLS 인증서 속성, IP 주소 등을 검증함. - 재시도 예시에서는
https://api.example.org/jobs/{{job_id}}에 최대 10회, 300ms 간격으로 요청하고 JSON 상태가COMPLETED인지 확인함. IPv4를 지정하거나 응답 IP가 IPv6가 아닌지도 검사할 수 있음.
HTTP 테스트 도구로도 사용
- Hurl은 HTTP 요청 실행뿐 아니라 응답 테스트에도 사용할 수 있으며, 본문에 대한 XPath·JSONPath 쿼리와 상태 코드·응답 헤더 검증을 지원함.
- REST/JSON API 예시에서는
POST https://example.org/api/tests응답의X-Frame-Options헤더, JSON 상태, 테스트 개수와 ID 형식을 검사함. - HTML 예시에서는
https://example.org응답의 제목을 XPath로 확인함. - GraphQL 예시에서는
POST https://example.org/graphql로 인간의 이름과 키를 조회함. - SOAP 예시에서는
POST https://example.org/InStock으로 재고 가격을 요청하며, SOAP 네임스페이스는https://example.org임. - HTTP 엔드포인트 성능 검사 예시에서는
https://example.org/api/v1/pets의 응답 시간이 1,000ms 미만인지 확인함. - 응답 바이트 예시에서는
https://example.org/data.tar.gz의 SHA-256 해시를 검증함. - CI/CD에 통합할 수 있으며 텍스트, JUnit, TAP, HTML 보고서를 제공함.
Hurl을 선택하는 이유
- 텍스트 형식: 데브옵스와 개발자 모두를 위한 형식임.
- 빠른 CLI: 로컬 개발과 지속적 통합에 사용하는 명령줄 도구임.
- 단일 바이너리: 런타임을 요구하지 않아 설치가 간단함.
curl 기반
- Hurl은 Rust로 작성된 경량 바이너리이며, 내부 HTTP 엔진은 강력하고 신뢰성 높은 파일 전송 라이브러리인 libcurl을 기반으로 함.
- 텍스트 파일 형식에 HTTP 요청 실행·테스트를 위한 문법 편의를 더하지만, 핵심은 빠르고 효율적이며 IPv6와 HTTP/3를 지원하는 curl임.
피드백
- 개발 지원을 위한 GitHub 별표와 피드백·제안·버그 신고·개선 의견을 환영함.
- 피드백 전송 예시는
POST https://hurl.dev/api/feedback요청임.
자료
- 라이선스
- 블로그
- 튜토리얼
- 문서(HTML, PDF, Markdown 다운로드)
- GitHub
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요