GET og POST-anmodninger ved hjælp af Python
Dette indlæg diskuterer to HTTP (Hypertext Transfer Protocol)-anmodningsmetoder GET- og POST-anmodninger i Python og deres implementering i Python.
Hvad er HTTP?
HTTP er et sæt protokoller designet til at muliggøre kommunikation mellem klienter og servere. Det fungerer som en anmodning-svar-protokol mellem en klient og en server. En webbrowser kan være klienten, og en applikation på en computer, der hoster et websted, kan være serveren. Så for at anmode om et svar fra serveren er der hovedsageligt to metoder:
- FÅ : For at anmode om data fra serveren.
- STOLPE : For at sende data, der skal behandles, til serveren.
Her er et simpelt diagram, der forklarer det grundlæggende koncept for GET- og POST-metoder.
Nu skal du lave HTTP-anmodninger Python vi kan bruge flere HTTP-biblioteker som:
Det mest elegante og enkleste af de ovennævnte biblioteker er Requests. Vi vil bruge anmodningsbiblioteket i denne artikel. Brug følgende kommando for at downloade og installere Requests-biblioteket:
pip install requestsLav en Get-anmodning
Ovenstående eksempel finder breddegraden og den formaterede adresse for en given placering ved at sende en GET-anmodning til Google Maps API. An API (Application Programming Interface) giver dig mulighed for at få adgang til de interne funktioner i et program på en begrænset måde. Og i de fleste tilfælde er de leverede data inde JSON (JavaScript Object Notation) format (som er implementeret som ordbogsobjekter i 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: %s n Longitude: %s n Formatted Address: %s ' % ( latitude longitude formatted_address ))Produktion:
![]()
Vigtige punkter at udlede:
PARAMS = {'address':location}URL'en for en GET-anmodning har generelt nogle parametre med sig. For anmodningerne kan biblioteksparametre defineres som en ordbog. Disse parametre parses senere ned og tilføjes til basis-URL'en eller API-slutpunktet. For at forstå parameterens rolle, prøv at udskrive r.url efter at responsobjektet er oprettet. Du vil se noget som dette:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityDette er den faktiske URL, som GET-anmodningen er lavet på
r = requests.get(url = URL params = PARAMS)Her opretter vi et svarobjekt 'r' som gemmer anmodning-svaret. Vi bruger requests.get()-metoden, da vi sender en GET-anmodning. De to argumenter, vi sender, er URL og parameterordbogen.
data = r.json()For nu at hente dataene fra responsobjektet skal vi konvertere det rå responsindhold til en JSON-type datastruktur. Dette opnås ved at bruge json() metoden. Til sidst udtrækker vi den nødvendige information ved at parse objektet af JSON-typen.
Lav en POST-anmodning
Dette eksempel forklarer, hvordan du indsætter din kildekode til pastebin.com ved at sende en POST-anmodning til PASTEBIN API. Først og fremmest skal du generere en API-nøgle ved at tilmelding her og derefter få adgang til din API-nøgle her.
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 )Vigtige funktioner i denne kode:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}Her skal vi igen sende nogle data til API-serveren. Vi gemmer disse data som en ordbog.
r = requests.post(url = API_ENDPOINT data = data)Her opretter vi et svarobjekt 'r' som gemmer anmodning-svaret. Vi bruger requests.post()-metoden, da vi sender en POST-anmodning. De to argumenter, vi sender, er URL'en og dataordbogen.
pastebin_url = r.textSom svar behandler serveren de data, der sendes til den, og sender din pastebin_URL kildekode som nemt kan tilgås af r.tekst.
requests.post metoden kan bruges til mange andre opgaver såvel som at udfylde og indsende webformularer, der lægges ud på din FB-tidslinje ved hjælp af Facebook Graph API osv.
Her er nogle vigtige punkter at overveje:
- Når metoden er GET kodes alle formulardata ind i URL'en og føjes til handling URL som forespørgselsstrengparametre. Med POST-formularen vises data inden for beskedtekst af HTTP-anmodningen.
- I GET-metoden er parameterdata begrænset til, hvad vi kan fylde på anmodningslinjen (URL). Sikrest at bruge mindre end 2K parametre, nogle servere håndterer op til 64K. Intet sådant problem i POST-metoden, da vi sender data i beskedtekst af HTTP-anmodningen ikke URL'en.
- Kun ASCII-tegn er tilladt for data, der skal sendes i GET-metoden. Der er ingen sådan begrænsning i POST-metoden.
- GET er mindre sikkert sammenlignet med POST, fordi de sendte data er en del af URL'en. Så GET-metoden bør ikke bruges, når der sendes adgangskoder eller andre følsomme oplysninger.