Buat Permintaan HTTP Tanpa Curl
Anda mungkin bekerja pada pelayan tanpa curl atau wget. Anda perlu menguji satu endpoint tetapi alatan tersebut tiada. Anda boleh menggunakan Bash untuk menghantar permintaan HTTP secara terus.
Bash mempunyai ciri tersembunyi yang dipanggil /dev/tcp. Ini bukan fail sebenar. Ia adalah peranti khas yang difahami oleh Bash. Apabila anda menulis ke /dev/tcp/hostname/port, Bash akan membuka sambungan TCP untuk anda.
Cara ia berfungsi:
Anda menggunakan arahan exec untuk menguruskan deskriptor fail. Sebagai contoh, anda boleh membuka deskriptor fail 3 untuk membaca dan menulis.
Sintaksnya kelihatan seperti ini:
exec 3<>/dev/tcp/example.com/80
Sebaik sahaja sambungan ini dibuka, anda boleh menghantar data kepadanya. Anda juga boleh membaca data daripadanya. Kaedah ini menunjukkan kepada anda bagaimana protokol HTTP berfungsi pada tahap rendah.
Cara untuk membuat permintaan GET:
Untuk mendapatkan data, anda mesti menghantar pengepala (headers) yang betul. Anda memerlukan baris kosong di penghujung untuk menandakan tamatnya permintaan anda.
Ikuti langkah-langkah ini:
- Tetapkan pemboleh ubah host, port, dan path anda.
- Buka sambungan menggunakan
exec. - Gunakan
printfuntuk menghantar permintaan GET. Gunakan\r\nuntuk penamat baris. - Gunakan
catatau gelung (loop) untuk membaca respons. - Tutup deskriptor fail apabila selesai.
Skrip contoh:
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>&-
Teknik ini membantu anda memahami bagaimana klien dan pelayan berkomunikasi antara satu sama lain. Ia adalah kemahiran yang berguna untuk penyahpepijatan (debugging) pada sistem minimalis.