תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

שימוש ב-curl להעברת מידע באמצעות ה-URL

מחבר:
בתאריך:

curl היא ספרייה ענקית, ותיקה ומאוד מגוונת, חופשית לשימוש שאפשר לעבוד איתה גם באמצעות כלי שורת הפקודות טרמינל. תפקידה להעביר מידע מרשת האינטרנט, דרך API שונים באמצעות מגוון גדול של פרוטוקולים. דוגמת: HTTP, HTTPS, FTP, STMP עוגיות רשת, ועוד רבים אחרים.

ל-curl יש מאות אפשרויות. החבילה התחילה לפעול בראשית ימי האינטרנט, עוד ב- 1998. מאז היא מתוחזקת בקביעות על ידי מאות מפתחים שמוציאים גרסה חדשה מדי כמה חודשים.

במדריך זה אתן הצצה לכמה פקודות מועילות במיוחד, ומי שרוצה להעמיק, מוזמן להכנס לתיעוד הרשמי בכתובת https://curl.se

how to use curl from the terminal command line

 

הורדת התוכן של דף אינטרנט

מאוד פשוט להוריד את התוכן של דף אינטרנט ולצפות בו משורת הפקודות. כל מה שצריך לעשות הוא להקליד את הפקודה 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 - מה שרצית לדעת ולא העזת לשאול

Cron job וקסמי האוטומציה

סקריפט ראשון בשפת bash - שלום עולם כמובן!

 

לכל המדריכים בסדרת הלינוקס

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

מתי הוקמה המדינה?