פוסט זה דן בשתי שיטות בקשות HTTP (Hypertext Transfer Protocol) בקשות GET ו-POST ב-Python והטמעתן ב-Python.
מה זה HTTP?
HTTP הוא קבוצה של פרוטוקולים שנועדו לאפשר תקשורת בין לקוחות ושרתים. זה עובד כפרוטוקול בקשה-תגובה בין לקוח לשרת. דפדפן אינטרנט עשוי להיות הלקוח ויישום במחשב המארח אתר עשוי להיות השרת. אז כדי לבקש תגובה מהשרת יש בעיקר שתי שיטות:
- לְקַבֵּל : כדי לבקש נתונים מהשרת.
- שֶׁלְאַחַר : כדי לשלוח נתונים לעיבוד לשרת.
הנה תרשים פשוט שמסביר את הרעיון הבסיסי של שיטות GET ו-POST.
עכשיו כדי לבצע בקשות 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:%snLongitude:%snFormatted Address:%s' %(latitude longitudeformatted_address))
תְפוּקָה:
נקודות חשובות שיש להסיק:
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 בעת שליחת סיסמאות או מידע רגיש אחר.