ביצוע בקשות 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, ה-port וה-path שלכם.
- פתחו את החיבור באמצעות
exec. - השתמשו ב-
printfכדי לשלוח את בקשת ה-GET. השתמשו ב-\r\nעבור סיומי שורות. - השתמשו ב-
catאו בלולאה כדי לקרוא את התגובה. - סגרו את ה-file descriptor בסיום.
סקריפט לדוגמה:
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) במערכות מינימליסטיות.