קבל ופרסם בקשות באמצעות Python

קבל ופרסם בקשות באמצעות Python

פוסט זה דן בשתי שיטות בקשות HTTP (Hypertext Transfer Protocol) בקשות GET ו-POST ב-Python והטמעתן ב-Python. 

מה זה HTTP?  

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

  1. לְקַבֵּל : כדי לבקש נתונים מהשרת.
  2. שֶׁלְאַחַר : כדי לשלוח נתונים לעיבוד לשרת.

הנה תרשים פשוט שמסביר את הרעיון הבסיסי של שיטות GET ו-POST.

GET ו-POST בקשות באמצעות Python 

 עכשיו כדי לבצע בקשות HTTP פִּיתוֹן אנו יכולים להשתמש במספר ספריות HTTP כמו:

האלגנטי והפשוט ביותר מבין הספריות המפורטות לעיל הוא Requests. אנו נשתמש בספריית הבקשות במאמר זה. כדי להוריד ולהתקין את ספריית הבקשות השתמש בפקודה הבאה:

 pip install requests  

ביצוע בקשת קבל

הדוגמה שלמעלה מוצאת את קו הרוחב והכתובת המעוצבת של מיקום נתון על ידי שליחת בקשת GET ל-API של מפות Google. א ממשק API (ממשק תכנות יישומים) מאפשר לך לגשת לתכונות הפנימיות של תוכנית באופן מוגבל. וברוב המקרים הנתונים שסופקו נמצאים ב JSON (סימון אובייקט JavaScript) פורמט (המיושם כאובייקטי מילון ב-Python!).

Python
   # importing the requests library   import   requests   # api-endpoint   URL   =   'http://maps.googleapis.com/maps/api/geocode/json'   # location given here   location   =   'delhi technological university'   # defining a params dict for the parameters to be sent to the API   PARAMS   =   {  'address'  :  location  }   # sending get request and saving the response as response object   r   =   requests  .  get  (  url   =   URL     params   =   PARAMS  )   # extracting data in json format   data   =   r  .  json  ()   # extracting latitude longitude and formatted address   # of the first matching location   latitude   =   data  [  'results'  ][  0  ][  'geometry'  ][  'location'  ][  'lat'  ]   longitude   =   data  [  'results'  ][  0  ][  'geometry'  ][  'location'  ][  'lng'  ]   formatted_address   =   data  [  'results'  ][  0  ][  'formatted_address'  ]   # printing the output   print  (  'Latitude:  %s  n  Longitude:  %s  n  Formatted Address:  %s  '   %  (  latitude     longitude    formatted_address  ))   

תְפוּקָה:

קבל ופרסם בקשות באמצעות Python

נקודות חשובות שיש להסיק:

 PARAMS = {'address':location}  

כתובת ה-URL עבור בקשת GET נושאת בדרך כלל כמה פרמטרים. עבור הבקשות ניתן להגדיר פרמטרים של ספרייה כמילון. פרמטרים אלה מנותחים מאוחר יותר ומתווספים לכתובת ה-URL הבסיסית או לנקודת הקצה של ה-API. כדי להבין את תפקיד הפרמטר נסה להדפיס r.url לאחר יצירת אובייקט התגובה. אתה תראה משהו כזה:

 http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university  

זוהי כתובת האתר האמיתית שבה מתבצעת בקשת ה-GET

 r = requests.get(url = URL params = PARAMS)  

כאן אנו יוצרים אובייקט תגובה 'r' אשר יאחסן את הבקשה-תגובה. אנו משתמשים בשיטת requests.get() מכיוון שאנו שולחים בקשת GET. שני הארגומנטים שאנו מעבירים הם URL ומילון הפרמטרים.

 data = r.json()  

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

ביצוע בקשת POST

דוגמה זו מסבירה כיצד להדביק את קוד_מקור אֶל pastebin.com על ידי שליחת בקשת POST ל-PASTEBIN API. קודם כל תצטרך ליצור מפתח API על ידי נרשמת כאן ולאחר מכן גישה שלך מפתח API כאן.  

Python
   # importing the requests library   import   requests   # defining the api-endpoint   API_ENDPOINT   =   'https://pastebin.com/api/api_post.php'   # your API key here   API_KEY   =   'XXXXXXXXXXXXXXXXX'   # your source code here   source_code   =   '''   print('Hello world!')   a = 1   b = 2   print(a + b)   '''   # data to be sent to api   data   =   {  'api_dev_key'  :   API_KEY     'api_option'  :   'paste'     'api_paste_code'  :   source_code     'api_paste_format'  :   'python'  }   # sending post request and saving response as response object   r   =   requests  .  post  (  url  =  API_ENDPOINT     data  =  data  )   # extracting response text   pastebin_url   =   r  .  text   print  (  'The pastebin URL is:  %s  '   %   pastebin_url  )   

תכונות חשובות של קוד זה:

 data = {'api_dev_key':API_KEY   
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}

כאן שוב נצטרך להעביר כמה נתונים לשרת ה-API. אנו מאחסנים נתונים אלה כמילון.

 r = requests.post(url = API_ENDPOINT data = data)  

כאן אנו יוצרים אובייקט תגובה 'r' אשר יאחסן את הבקשה-תגובה. אנו משתמשים בשיטת requests.post() מכיוון שאנו שולחים בקשת POST. שני הארגומנטים שאנו מעבירים הם כתובת האתר ומילון הנתונים.

 pastebin_url = r.text  

בתגובה השרת מעבד את הנתונים שנשלחו אליו ושולח את ה-pastebin_URL שלך קוד_מקור שניתן לגשת אליו פשוט על ידי r.text.

requests.post השיטה יכולה לשמש עבור משימות רבות אחרות כמו גם מילוי ושליחה של טפסי האינטרנט המפרסמים על ציר הזמן שלך ב-FB באמצעות ה-API של Facebook Graph וכו'. 

הנה כמה נקודות חשובות שכדאי לחשוב עליהן:

  • כאשר השיטה היא GET כל נתוני הטופס מקודדים לכתובת ה-URL ומצורפים ל- פְּעוּלָה כתובת אתר כפרמטרים של מחרוזת שאילתה. עם טופס POST הנתונים מופיעים בתוך גוף ההודעה של בקשת ה-HTTP.
  • בשיטת GET נתוני הפרמטרים מוגבלים למה שאנחנו יכולים להכניס לשורת הבקשה (URL). הכי בטוח להשתמש בפחות מ-2K של פרמטרים, שרתים מסוימים מטפלים בעד 64K. אין בעיה כזו בשיטת POST מכיוון שאנו שולחים נתונים ב- גוף ההודעה של בקשת ה-HTTP לא כתובת האתר.
  • רק תווי ASCII מותרים לשליחת נתונים בשיטת GET. אין הגבלה כזו בשיטת POST.
  • GET פחות מאובטח בהשוואה ל-POST מכיוון שהנתונים שנשלחו הם חלק מכתובת האתר. אז אין להשתמש בשיטת GET בעת שליחת סיסמאות או מידע רגיש אחר.
צור חידון