Curl 없이 HTTP 요청 보내기

curl이나 wget이 없는 서버에서 작업해야 할 수도 있습니다. 엔드포인트를 테스트해야 하는데 해당 도구들이 없는 상황이죠. 이럴 때 Bash를 사용하여 직접 HTTP 요청을 보낼 수 있습니다.

Bash에는 /dev/tcp라는 숨겨진 기능이 있습니다. 이것은 실제 파일이 아니라 Bash가 이해하는 특수 장치입니다. /dev/tcp/hostname/port에 데이터를 쓰면, Bash가 사용자를 위해 TCP 연결을 열어줍니다.

작동 원리:

exec 명령어를 사용하여 파일 디스크립터(file descriptor)를 관리합니다. 예를 들어, 읽기 및 쓰기용으로 파일 디스크립터 3번을 열 수 있습니다.

구문은 다음과 같습니다: exec 3<>/dev/tcp/example.com/80

연결이 열리면 데이터를 전송하거나 읽을 수 있습니다. 이 방법은 HTTP 프로토콜이 저수준(low level)에서 어떻게 작동하는지 보여줍니다.

GET 요청을 보내는 방법:

데이터를 가져오려면 올바른 헤더를 보내야 합니다. 요청의 끝을 알리기 위해 마지막에 빈 줄을 추가해야 합니다.

다음 단계를 따르세요:

예제 스크립트:

HOST="example.com"
PORT=80
REQUEST_PATH="/"
exec 3<>/dev/tcp/${HOST}/${PORT}
printf "GET ${REQUEST_PATH} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
cat <&3
exec 3>&-

이 기술은 클라이언트와 서버가 서로 어떻게 통신하는지 이해하는 데 도움이 됩니다. 최소한의 시스템(minimalist systems)에서 디버깅할 때 유용한 기술입니다.

Source: https://dev.to/kelvin_kariuki_20f4bec616/developer-take-on-til-you-can-make-http-requests-without-curl-using-bash-devtcp-578k