ביצוע בקשות HTTP ללא curl

ייתכן שתעבדו על שרת ללא curl או wget. אתם צריכים לבדוק endpoint אך הכלים הללו חסרים. אתם יכולים להשתמש ב-Bash כדי לשלוח בקשות HTTP ישירות.

ל-Bash יש תכונה נסתרת הנקראת /dev/tcp. זהו אינו קובץ אמיתי. זהו מכשיר (device) מיוחד ש-Bash מבין. כשאתם כותבים ל-/dev/tcp/hostname/port, Bash פותח עבורכם חיבור TCP.

איך זה עובד:

משתמשים בפקודת exec כדי לנהל file descriptors. לדוגמה, ניתן לפתוח את file descriptor 3 לקריאה וכתיבה.

התחביר נראה כך: exec 3<>/dev/tcp/example.com/80

ברגע שהחיבור הזה פתוח, אתם שולחים אליו נתונים. אתם גם קוראים ממנו נתונים. שיטה זו מראה לכם כיצד פרוטוקול HTTP עובד ברמה נמוכה (low level).

איך לבצע בקשת GET:

כדי לקבל נתונים, עליכם לשלוח headers תקינים. עליכם להוסיף שורה ריקה בסוף כדי לסמן את סיום הבקשה שלכם.

בצעו את השלבים הבאים:

סקריפט לדוגמה:

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>&-

טכניקה זו עוזרת לכם להבין כיצד לקוחות (clients) ושרתים מתקשרים זה עם זה. זהו כישור שימושי לניפוי שגיאות (debugging) במערכות מינימליסטיות.

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