Ez a bejegyzés két HTTP (Hypertext Transfer Protocol) kérési módszert tárgyal, a GET és POST kéréseket a Pythonban, valamint ezek megvalósítását Pythonban.
Mi az a HTTP?
A HTTP protokollok halmaza, amely lehetővé teszi az ügyfelek és a szerverek közötti kommunikációt. Kérelem-válasz protokollként működik a kliens és a szerver között. A webböngésző lehet a kliens, a szerver pedig egy webhelyet tároló számítógépen lévő alkalmazás. Tehát a szervertől való válasz kérésére alapvetően két módszer létezik:
- KAP : Adatok kérése a szervertől.
- POST : Feldolgozandó adatok elküldése a szerverre.
Íme egy egyszerű diagram, amely elmagyarázza a GET és POST metódusok alapfogalmát.
Most HTTP kéréseket kell beküldeni Piton többféle HTTP-könyvtárat használhatunk, például:
A fent felsorolt könyvtárak közül a legelegánsabb és legegyszerűbb a Requests. Ebben a cikkben a kérések könyvtárát fogjuk használni. A Requests könyvtár letöltéséhez és telepítéséhez használja a következő parancsot:
pip install requestsGet kérés benyújtása
A fenti példa megkeresi egy adott hely szélességi és hosszúsági fokát és formázott címét úgy, hogy GET kérést küld a Google Maps API-nak. An API (Application Programming Interface) lehetővé teszi a programok belső funkcióinak korlátozott elérését. És a legtöbb esetben a megadott adatok benne vannak JSON (JavaScript objektumjelölés) formátumban (amely a Pythonban szótárobjektumként van megvalósítva!).
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))
Kimenet:
Fontos következtetések:
PARAMS = {'address':location}A GET-kérés URL-címe általában tartalmaz néhány paramétert. A kérésekhez a könyvtár paraméterei szótárként definiálhatók. Ezeket a paramétereket a rendszer később elemzi, és hozzáadja az alap URL-hez vagy az API-végponthoz. A paraméter szerepének megértéséhez próbáljon kinyomtatni r.url a válaszobjektum létrehozása után. Valami ilyesmit fog látni:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityEz az a tényleges URL, amelyen a GET kérés érkezik
r = requests.get(url = URL params = PARAMS)Itt létrehozunk egy „r” válaszobjektumot, amely tárolja a kérés-választ. A requests.get() metódust használjuk, mivel GET kérést küldünk. A két átadott argumentum az URL és a paraméterszótár.
data = r.json()Most az adatok lekéréséhez a válaszobjektumból a nyers választartalmat JSON-típusú adatstruktúrává kell konvertálnunk. Ez a json() metódus használatával érhető el. Végül kivonjuk a szükséges információkat a JSON-típusú objektum elemzésével.
POST kérés készítése
Ez a példa elmagyarázza, hogyan kell beilleszteni forráskód hogy pastebin.com POST kérés elküldésével a PASTEBIN API-nak. Először is létre kell hoznia egy API-kulcsot itt iratkozz fel majd hozzáfér a saját API kulcs itt.
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)
A kód fontosabb jellemzői:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Itt ismét át kell adnunk néhány adatot az API-kiszolgálónak. Ezeket az adatokat szótárként tároljuk.
r = requests.post(url = API_ENDPOINT data = data)Itt létrehozunk egy „r” válaszobjektumot, amely tárolja a kérés-választ. A requests.post() metódust használjuk, mivel POST kérést küldünk. A két átadott argumentum az URL és az adatszótár.
pastebin_url = r.textVálaszul a szerver feldolgozza a neki küldött adatokat, és elküldi az Ön pastebin_URL-jét forráskód amelyhez egyszerűen hozzá lehet férni r.text.
kérések.bejegyzés A módszer számos más feladatra is használható, mint például az FB idővonalán közzétett webes űrlapok kitöltése és beküldése a Facebook Graph API segítségével stb.
Íme néhány fontos szempont, amelyeken érdemes elgondolkodni:
- Ha a metódus GET, az összes űrlapadat az URL-be van kódolva, és hozzáfűződik a akció URL lekérdezési karakterlánc-paraméterként. A POST űrlapon belül az adatok jelennek meg üzenet törzse a HTTP-kéréstől.
- A GET metódusban a paraméteradatok csak arra korlátozódnak, amit a kéréssorba (URL) tudunk betolni. A legbiztonságosabb, ha 2K-nál kevesebb paramétert használunk, egyes szerverek akár 64K-t is kezelnek. Nincs ilyen probléma a POST metódusban, mivel adatokat küldünk a üzenet törzse a HTTP-kérés, nem az URL-cím.
- Csak ASCII-karakterek engedélyezettek a GET metódusban elküldött adatokhoz. A POST metódusban nincs ilyen korlátozás.
- A GET kevésbé biztonságos a POST-hoz képest, mivel a küldött adatok az URL részét képezik. Tehát a GET módszert nem szabad jelszavak vagy más érzékeny információk küldésekor használni.