משתמש:Mad dr/פייתון/מודולים/requests

בכל שפה, מתגלה אתגר לא פשוט כאשר רוצים להשתמש ב-API חיצוני בפרוטוקול http.

הפרוטוקול כולל כתובת (url) מתודה (get/post/put...) ולעיתים קרובות גם תוכן והזדהות, בדרך כלל ישנו מימוש בסיסי של ספריית url בתוך השפה, והמפתח נדרש לנהל בעצמו את ההתייחסויות לקוד המוחזר ולתוכן.

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

השימוש בספרייה הוא מאוד אינטואיטיבי, למתודות שלה יש שמות כמו כל המתודות המשמשות את http, והיא מקבלת כפרמטרים את כל המידע הנדרש (url, auth, cookies, parameters וכו'). המתוה מחזירה אובייקט המכיל את התשובה, ובו פרמטרים של הקוד והתוכן, כמו גם פונקציה שמחזירה את התוכן כאובייקט (מילון - dictonary) במידה והתוכן הוא json תקין.

דוגמא (עבור הדוגמאות השתמשתי ב-‎http://httpbin.org/‎)

>>> import requests
>>> r = requests.get('http://httpbin.org/basic-auth/user/passwd',auth=('user', 'passwd'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json'
>>> r.encoding
>>> r.text
u'{\n "authenticated": true, \n "user": "user"\n}'
>>> r.json()
{u'authenticated': True, u'user': u'user'}

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

ל-requests יש אפשרות לעבוד עם בקשות בדידות (כמו בדוגמא למעלה) או שאפשר לפתוח session ולהגדיר בו עוגיות וheaders רצויים.

>>> s = requests.Session()
>>>
>>> s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
<Response [200]>
>>> r = s.get("http://httpbin.org/cookies")
>>> r
<Response [200]>
>>> r.cookies
<<class 'requests.cookies.RequestsCookieJar'>[]>
>>> r.text
u'{\n "cookies": {\n "sessioncookie": "123456789"\n }\n}'

כאן אתם רואים שהעוגייה שהגדרנו בקריאה הראשונה נשארה לנו גם לקריאה הבאה.