Tento příspěvek pojednává o dvou metodách požadavků HTTP (Hypertext Transfer Protocol) GET a POST požadavky v Pythonu a jejich implementaci v Pythonu.
Co je HTTP?
HTTP je sada protokolů navržených pro umožnění komunikace mezi klienty a servery. Funguje jako protokol žádost-odpověď mezi klientem a serverem. Klientem může být webový prohlížeč a serverem může být aplikace v počítači, který je hostitelem webové stránky. Chcete-li tedy požádat o odpověď ze serveru, existují hlavně dvě metody:
- ZÍSKAT : Vyžádat si data ze serveru.
- ZVEŘEJNIT : Odeslání dat ke zpracování na server.
Zde je jednoduchý diagram, který vysvětluje základní koncept metod GET a POST.
Nyní zadávejte požadavky HTTP Krajta můžeme použít několik HTTP knihoven jako:
Nejelegantnější a nejjednodušší z výše uvedených knihoven jsou Požadavky. V tomto článku budeme používat knihovnu požadavků. Chcete-li stáhnout a nainstalovat knihovnu požadavků, použijte následující příkaz:
pip install requestsZadání požadavku Get
Výše uvedený příklad najde zeměpisnou šířku, délku a formátovanou adresu daného místa odesláním požadavku GET do rozhraní API Map Google. An API (Application Programming Interface) umožňuje omezený přístup k interním funkcím programu. A ve většině případů jsou poskytnutá data in JSON (JavaScript Object Notation) formát (který je v Pythonu implementován jako objekty slovníku!).
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))
výstup:
Důležité body, které je třeba odvodit:
PARAMS = {'address':location}Adresa URL pro požadavek GET s sebou obecně nese některé parametry. Pro požadavky lze parametry knihovny definovat jako slovník. Tyto parametry jsou později analyzovány a přidány do základní adresy URL nebo koncového bodu API. Chcete-li porozumět roli parametru, zkuste jej vytisknout r.url po vytvoření objektu odpovědi. Uvidíte něco takového:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityToto je skutečná adresa URL, na které se provádí požadavek GET
r = requests.get(url = URL params = PARAMS)Zde vytvoříme objekt odpovědi 'r', který uloží požadavek-odpověď. Používáme metodu request.get(), protože posíláme požadavek GET. Dva argumenty, které předáme, jsou URL a slovník parametrů.
data = r.json()Nyní, abychom mohli načíst data z objektu odpovědi, musíme převést nezpracovaný obsah odpovědi na datovou strukturu typu JSON. Toho je dosaženo pomocí metody json(). Nakonec extrahujeme požadované informace analýzou objektu typu JSON.
Vytvoření požadavku POST
Tento příklad vysvětluje, jak vložit váš zdrojový_kód na pastebin.com odesláním požadavku POST do PASTEBIN API. Nejprve budete muset vygenerovat klíč API přihlášení zde a poté přístup k vašemu Klíč API zde.
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)
Důležité vlastnosti tohoto kódu:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Zde opět budeme muset předat nějaká data serveru API. Tato data ukládáme jako slovník.
r = requests.post(url = API_ENDPOINT data = data)Zde vytvoříme objekt odpovědi 'r', který uloží požadavek-odpověď. Používáme metodu request.post(), protože posíláme požadavek POST. Dva argumenty, které předáme, jsou URL a datový slovník.
pastebin_url = r.textV reakci na to server zpracuje data, která mu byla odeslána, a odešle vaši pastebin_URL zdrojový_kód ke kterému lze jednoduše přistupovat r.text.
žádosti.post Metoda může být použita pro mnoho dalších úkolů, stejně jako vyplňování a odesílání webových formulářů zveřejněných na vaší FB časové ose pomocí Facebook Graph API atd.
Zde je několik důležitých bodů k zamyšlení:
- Když je metoda GET, všechna data formuláře jsou zakódována do adresy URL a připojena k akce URL jako parametry řetězce dotazu. S formulářem POST se data zobrazí v tělo zprávy požadavku HTTP.
- V metodě GET jsou data parametrů omezena na to, co můžeme nacpat do řádku požadavku (URL). Nejbezpečnější je použít méně než 2 000 parametrů, některé servery zpracovávají až 64 000 parametrů. Žádný takový problém v metodě POST, protože odesíláme data v tělo zprávy požadavku HTTP, nikoli URL.
- Pro data, která mají být odesílána metodou GET, jsou povoleny pouze znaky ASCII. V metodě POST žádné takové omezení neexistuje.
- GET je méně bezpečný ve srovnání s POST, protože odeslaná data jsou součástí adresy URL. Metoda GET by se tedy neměla používat při odesílání hesel nebo jiných citlivých informací.