שימוש ב-curl להעברת מידע באמצעות ה-URL
curl היא ספרייה ענקית, ותיקה ומאוד מגוונת, חופשית לשימוש שאפשר לעבוד איתה גם באמצעות כלי שורת הפקודות טרמינל. תפקידה להעביר מידע מרשת האינטרנט, דרך API שונים באמצעות מגוון גדול של פרוטוקולים. דוגמת: HTTP, HTTPS, FTP, STMP עוגיות רשת, ועוד רבים אחרים.
ל-curl יש מאות אפשרויות. החבילה התחילה לפעול בראשית ימי האינטרנט, עוד ב- 1998. מאז היא מתוחזקת בקביעות על ידי מאות מפתחים שמוציאים גרסה חדשה מדי כמה חודשים.
במדריך זה אתן הצצה לכמה פקודות מועילות במיוחד, ומי שרוצה להעמיק, מוזמן להכנס לתיעוד הרשמי בכתובת https://curl.se
הורדת התוכן של דף אינטרנט
מאוד פשוט להוריד את התוכן של דף אינטרנט ולצפות בו משורת הפקודות. כל מה שצריך לעשות הוא להקליד את הפקודה curl ואחריה כתובת URL:
$ curl example.com
- וזהו, התוכן יוצג על גבי מסך הטרמינל.
במידה ומעוניינים להוריד את התוכן לקובץ אז מוסיפים לפקודה curl את האופציה output:
$ curl example.com --output path/to/file
כדי לראות את ה-header של התגובה הכולל מידע מטה על דף האינטרנט (גיל, קאש, סוג שרת, תאריך וכיו"ב) נוסיף את האופציה i לפקודה:
$ curl -i example.com
- התוצאה תכלול את ההדר וגם את ה-body
כדי לראות את ה-header בלבד. בלי ה-body נשתמש ב-l:
$ curl -I example.com
כדי לעקוב אחרי כל ההפניות עד שמגיעים לדף המבוקש נוסיף את האופציה L:
$ curl -L example.com
זו אופציה חשובה אם הכתובת אליה אנו פונים מפנה לכתובת אחרת. זו יכולה להיות הפנייה 301 כי הדף עבר למקום אחר. אם לא נשתמש באופציה והדף עבר למקום חדש curl לא ידע מה לעשות.
כדי לעקוב אחרי ההפניות ואז להציג את המידע הקיים ב-header בלבד נשתמש בשתי האופציות שלמדנו להכיר L וגם l:
$ curl -I -L example.com
אפשר לעבוד עם יותר מכתובת אחת באמצעות globbing. לדוגמה, להוריד את התוכן של מספר דפים מאותו אתר לקובץ על המחשב באמצעות שורת קוד אחת:
$ curl example.com/{a,b,c} -o my_file.html
נעשה פייפ ל-jq בשביל לקבל הדפסה יפה של תוכן json:
$ curl https://dummyjson.com/products | jq
כשעובדים עם curl ומשהו מתחרבש אפשר לבדוק עם האופציה v (קיצור של verbose) שמספקת הרבה מידע על המתרחש מתחת למכסה המנוע:
$ curl -v example.com -o /dev/null
לא כל השרתים מוכנים לעבוד עם curl אז אפשר לשלוח header ולהתחזות למשהו מוכר יותר. לדוגמה, להתחזות לדפדפן כרום על לינוקס על ידי שימוש ב-user agent ב-header (ה- user agent משתנה מדי פעם אז כדאי לברר לפני השימוש):
$ curl example.com -H "User-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
שליחת מידע ב-POST כשעובדים עם curl
אפשר לשלוח מידע ב-POST על ידי שימוש באופציה d
נשלח באמצעות הפקודה curl והאופציה d שם משתמש וסיסמה לטופס אינטרנטי:
$ curl -d "name=Joe&password=12345" -i example.com/form
או:
$ curl --user myusername:mypassword //example.com
גם קבצים ניתן להעלות באמצעות POST:
$ curl -d @file_name example.com/upload -o saved
- אחרי האופציה o כתבנו את שם הקובץ אותו אנו מעוניינים להעלות לשרת המרוחק.
כשאנחנו שולחים מידע בפורמט JSON ב-POST אז כדאי לציין את סוג הנתונים בהדר, לדוגמה:
$ curl --data-binary @file_name.json -H "Content-Type: application/json" example.com
עבודה עם עוגיות רשת cookies ו-curl
עוגיות רשת cookies הם צמדים של שם שדה וערך הנשלחים ב-header. השרת המקבל שולח אותם חזרה. curl יודע לקבל עוגיות רשת מהשרת וגם להחזיר.
לדוגמה, נשמור את עוגיות הרשת מאתר האינטרנט בקובץ ששמו "cookiejar.txt":
$ curl -c cookiejar.txt https://example.com
אפשר לקרוא את עוגיות הרשת מקובץ ולשלוח לשרת על ידי שימוש באופציה b וציון שם הקובץ ממנו צריך לקרוא:
$ curl -b cookiejar.txt https://example.com
כדי לעשות לוגאין לאתר ואחר כך לעבוד מול האתר כמשתמש מזוהה צריך לשמור את העוגיות אותם שולח השרת כדי לשלוח אותם חזרה בהמשך בכל פעם שרוצים לתקשר עם האתר.
נעשה לוגאין על ידי שליחת מידע על שם משתמש וסיסמה בפוסט, ונרשום את עוגיות הרשת המתקבלות חזרה לקובץ אצלנו על המחשב:
$ curl -c cookiejar.txt https://example.com
$ curl -b cookiejar.txt -c cookiejar.txt https://example.com/login -d user=joe -d password=1234
נקרא את עוגיות הרשת ששמרנו אצלנו ונשלח את המידע לשרת המרוחק לצורך הזדהות מול האתר:
$ curl -b cookiejar.txt -c cookiejar.txt https://example.com/user-page
הרבה פעמים דברים משתבשים כשעובדים עם curl מול שרת מרוחק אז כדי לקבל מידע על כל מה שקורה מתחת למכסה המנוע נשתמש באופציה --trace-ascii -
לדוגמה:
$ curl https://example.com/ -d senddata --trace-ascii -
אולי גם זה יעניין אותך:
מערכת הקבצים של Linux - מה שרצית לדעת ולא העזת לשאול
סקריפט ראשון בשפת bash - שלום עולם כמובן!
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.