This is an augment on writing BASH script to perform HTTP request (without using
curl
).In the last posts, “Creating TCP/UDP Socket with /bin/bash”, I’ve shown 4
usages on creating TCP socket using /bin/bash
.
Creating TCP/UDP Socket with /bin/bash
·415 words·2 mins
Posts
bash
cli
tcpip
Using /bin/bash to create TCP/UDP socket for troubleshooting
Here, I’ll be showing a more comprehensive way to perform HTTP request with Bash script, including return HTTP headers.
#!/usr/bin/env bash
PORT=80
HOST="httpbin.org"
exec 3<>/dev/tcp/$HOST/$PORT
HDRS=(
'GET /ip HTTP/1.1'
'Host: $HOST'
'Connection: close'
''
)
printf '%s\r\n' "${HDRS[@]}" >&3
while read -r data <&3; do
echo "recv: $data"
done
exec 3>&-
And here is the output.
$ ./bash_curl.sh
recv: HTTP/1.1 200 OK
recv: Date: Thu, 22 Aug 2024 15:14:54 GMT
recv: Content-Type: application/json
recv: Content-Length: 33
recv: Connection: close
recv: Server: gunicorn/19.9.0
recv: Access-Control-Allow-Origin: *
recv: Access-Control-Allow-Credentials: true
recv:
recv: {
recv: "origin": "115.164.33.158"
recv: }
$