HANKI- ja POST-pyynnöt Pythonilla
Tämä viesti käsittelee kahta HTTP (Hypertext Transfer Protocol) -pyyntömenetelmää, GET- ja POST-pyyntöjä Pythonissa ja niiden toteutusta Pythonissa.
Mikä on HTTP?
HTTP on joukko protokollia, jotka on suunniteltu mahdollistamaan viestinnän asiakkaiden ja palvelimien välillä. Se toimii pyyntö-vastausprotokollana asiakkaan ja palvelimen välillä. Web-selain voi olla asiakas ja sovellus tietokoneessa, joka isännöi verkkosivustoa, voi olla palvelin. Joten vastauksen pyytämiseen palvelimelta on pääasiassa kaksi tapaa:
- SAADA : Pyydä tietoja palvelimelta.
- LÄHETTÄÄ : Lähettääksesi palvelimelle käsiteltävät tiedot.
Tässä on yksinkertainen kaavio, joka selittää GET- ja POST-menetelmien peruskäsitteen.
Nyt voit tehdä HTTP-pyyntöjä Python voimme käyttää useita HTTP-kirjastoja, kuten:
Tyylikkäin ja yksinkertaisin yllä luetelluista kirjastoista on Requests. Käytämme tämän artikkelin pyyntökirjastoa. Voit ladata ja asentaa Requests-kirjaston käyttämällä seuraavaa komentoa:
pip install requestsHanki-pyynnön tekeminen
Yllä oleva esimerkki löytää tietyn sijainnin leveysasteen pituusasteen ja muotoillun osoitteen lähettämällä GET-pyynnön Google Maps -sovellusliittymälle. An API (Application Programming Interface) -sovelluksen avulla voit käyttää ohjelman sisäisiä ominaisuuksia rajoitetusti. Ja useimmissa tapauksissa annetut tiedot ovat mukana JSON (JavaScript Object Notation) muodossa (joka on toteutettu Pythonissa sanakirjaobjekteina!).
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 ))Lähtö:
![]()
Tärkeitä päätelmiä:
PARAMS = {'address':location}GET-pyynnön URL-osoite sisältää yleensä joitain parametreja. Pyyntöjä varten kirjaston parametrit voidaan määritellä sanakirjaksi. Nämä parametrit jäsennetään myöhemmin ja lisätään perus-URL-osoitteeseen tai API-päätepisteeseen. Ymmärtääksesi parametrin roolin, yritä tulostaa r.url sen jälkeen, kun vastausobjekti on luotu. Näet jotain tällaista:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityTämä on todellinen URL-osoite, johon GET-pyyntö tehdään
r = requests.get(url = URL params = PARAMS)Täällä luomme vastausobjektin 'r', joka tallentaa pyyntö-vastauksen. Käytämme requests.get()-menetelmää, koska lähetämme GET-pyynnön. Välittämämme kaksi argumenttia ovat URL ja parametrien sanakirja.
data = r.json()Nyt tietojen hakemiseksi vastausobjektista meidän on muutettava raakavastauksen sisältö JSON-tyyppiseksi tietorakenteeksi. Tämä saavutetaan käyttämällä json()-menetelmää. Lopuksi puramme tarvittavat tiedot jäsentämällä JSON-tyyppisen objektin.
POST-pyynnön tekeminen
Tämä esimerkki selittää, kuinka voit liittää lähdekoodi to pastebin.com lähettämällä POST-pyynnön PASTEBIN API:lle. Ensinnäkin sinun on luotava API-avain ilmoittautuminen tänne ja pääset sitten käsiksi omaan API-avain tässä.
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 )Tämän koodin tärkeitä ominaisuuksia:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}Tässäkin meidän on välitettävä joitakin tietoja API-palvelimelle. Tallennamme nämä tiedot sanakirjana.
r = requests.post(url = API_ENDPOINT data = data)Täällä luomme vastausobjektin 'r', joka tallentaa pyyntö-vastauksen. Käytämme requests.post() -menetelmää, koska lähetämme POST-pyynnön. Välittämämme kaksi argumenttia ovat URL-osoite ja tietosanakirja.
pastebin_url = r.textVastauksena palvelin käsittelee sille lähetetyt tiedot ja lähettää sinun pastebin_URL-osoitteen lähdekoodi johon pääsee yksinkertaisesti käsiksi r.text.
requests.post menetelmää voidaan käyttää moniin muihin tehtäviin, kuten FB-aikajanallasi olevien verkkolomakkeiden täyttämiseen ja lähettämiseen Facebook Graph API:n avulla jne.
Tässä on joitain tärkeitä asioita pohdittavaksi:
- Kun menetelmä on GET, kaikki lomaketiedot koodataan URL-osoitteeseen ja liitetään osoitteeseen toimintaa URL-osoite kyselymerkkijonoparametreina. POST-lomakkeella tiedot näkyvät sisällä viestin runko HTTP-pyynnöstä.
- GET-menetelmässä parametritiedot on rajoitettu siihen, mitä voimme täyttää pyyntöriville (URL). Turvallisinta käyttää alle 2 000 parametria, jotkut palvelimet käsittelevät jopa 64 000 parametria. Ei tällaista ongelmaa POST-menetelmässä, koska lähetämme tietoja viestin runko HTTP-pyynnöstä, ei URL-osoitteesta.
- Vain ASCII-merkit ovat sallittuja datassa, joka lähetetään GET-menetelmällä. POST-menetelmässä ei ole tällaista rajoitusta.
- GET on vähemmän turvallinen kuin POST, koska lähetetyt tiedot ovat osa URL-osoitetta. Joten GET-menetelmää ei tule käyttää salasanoja tai muita arkaluonteisia tietoja lähetettäessä.