logo

GET och POST-förfrågningar med Python

Det här inlägget diskuterar två HTTP (Hypertext Transfer Protocol)-begäransmetoder  GET och POST-förfrågningar i Python och deras implementering i Python. 

Vad är HTTP?  

HTTP är en uppsättning protokoll utformade för att möjliggöra kommunikation mellan klienter och servrar. Det fungerar som ett begäran-svar-protokoll mellan en klient och en server. En webbläsare kan vara klienten och en applikation på en dator som är värd för en webbplats kan vara servern. Så för att begära ett svar från servern finns det huvudsakligen två metoder:

  1. : För att begära data från servern.
  2. POSTA : För att skicka data som ska behandlas till servern.

Här är ett enkelt diagram som förklarar grundkonceptet för GET- och POST-metoderna.



GET och POST-förfrågningar med Python' src='//techcodeview.com/img/python/28/get-and-post-requests-using-python.webp' title= 

 Nu för att göra HTTP-förfrågningar in Python vi kan använda flera HTTP-bibliotek som:

Det mest eleganta och enklaste av de ovan listade biblioteken är Requests. Vi kommer att använda förfrågningsbiblioteket i den här artikeln. För att ladda ner och installera Requests-biblioteket använd följande kommando:

pip install requests

Göra en Get-förfrågan

Exemplet ovan hittar latitud longitud och formaterad adress för en given plats genom att skicka en GET-förfrågan till Google Maps API. En API (Application Programming Interface) ger dig tillgång till de interna funktionerna i ett program på ett begränsat sätt. Och i de flesta fall finns uppgifterna som tillhandahålls i JSON (JavaScript Object Notation) format (som är implementerat som ordboksobjekt 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:%snLongitude:%snFormatted Address:%s' %(latitude longitudeformatted_address)) 

Produktion:

GET och POST-förfrågningar med Python

Viktiga punkter att dra slutsatsen:

PARAMS = {'address':location}

URL:en för en GET-begäran innehåller i allmänhet vissa parametrar. För förfrågningarna kan biblioteksparametrar definieras som en ordbok. Dessa parametrar analyseras senare och läggs till i bas-URL:n eller API-slutpunkten. För att förstå parameterns roll, försök att skriva ut r.url efter att responsobjektet har skapats. Du kommer att se något sånt här:

http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university

Detta är den faktiska URL som GET-begäran görs på

r = requests.get(url = URL params = PARAMS)

Här skapar vi ett svarsobjekt 'r' som kommer att lagra begäran-svaret. Vi använder metoden requests.get() eftersom vi skickar en GET-förfrågan. De två argumenten vi skickar är URL och parametrarnas ordbok.

data = r.json()

För att nu kunna hämta data från responsobjektet måste vi konvertera råsvarsinnehållet till en datastruktur av JSON-typ. Detta uppnås genom att använda metoden json(). Slutligen extraherar vi den information som krävs genom att analysera objektet av JSON-typ.

Gör en POST-förfrågan

Det här exemplet förklarar hur du klistrar in din källkod till pastebin.com genom att skicka en POST-förfrågan till PASTEBIN API. Först och främst måste du generera en API-nyckel genom att anmäler sig här och sedan komma åt din API-nyckel här.  

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) 

Viktiga funktioner i denna kod:

data = {'api_dev_key':API_KEY  
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}

Även här kommer vi att behöva skicka en del data till API-servern. Vi lagrar dessa uppgifter som en ordbok.

r = requests.post(url = API_ENDPOINT data = data)

Här skapar vi ett svarsobjekt 'r' som kommer att lagra begäran-svaret. Vi använder metoden requests.post() eftersom vi skickar en POST-förfrågan. De två argument vi skickar är URL:en och dataordboken.

pastebin_url = r.text

Som svar bearbetar servern data som skickas till den och skickar din pastebin_URL källkod som enkelt kan nås av r.text.

requests.post Metoden kan användas för många andra uppgifter såväl som att fylla och skicka in webbformulären som publiceras på din FB-tidslinje med hjälp av Facebook Graph API etc. 

Här är några viktiga punkter att tänka på:

  • När metoden är GET kodas all formulärdata in i URL:en och läggs till i handling URL som frågesträngsparametrar. Med POST-formuläret visas data inom meddelandetext av HTTP-förfrågan.
  • I GET-metoden är parameterdata begränsad till vad vi kan stoppa in i begäranderaden (URL). Säkrast att använda mindre än 2K parametrar vissa servrar hanterar upp till 64K. Inga sådana problem i POST-metoden eftersom vi skickar data i meddelandetext för HTTP-begäran inte URL:en.
  • Endast ASCII-tecken är tillåtna för data som ska skickas i GET-metoden. Det finns ingen sådan begränsning i POST-metoden.
  • GET är mindre säkert jämfört med POST eftersom data som skickas är en del av URL:en. Så GET-metoden ska inte användas när du skickar lösenord eller annan känslig information.
Skapa frågesport