In dit bericht worden twee HTTP-verzoekmethoden (Hypertext Transfer Protocol) besproken: GET- en POST-verzoeken in Python en hun implementatie in Python.
Wat is HTTP?
HTTP is een reeks protocollen die zijn ontworpen om communicatie tussen clients en servers mogelijk te maken. Het werkt als een verzoek-antwoordprotocol tussen een client en een server. Een webbrowser kan de client zijn en een applicatie op een computer die als host fungeert voor een website kan de server zijn. Er zijn dus hoofdzakelijk twee methoden om een reactie van de server aan te vragen:
- KRIJGEN : Om gegevens van de server op te vragen.
- NA : Om gegevens voor verwerking naar de server te verzenden.
Hier is een eenvoudig diagram dat het basisconcept van de GET- en POST-methoden uitlegt.
Nu om HTTP-verzoeken in te voeren Python we kunnen verschillende HTTP-bibliotheken gebruiken, zoals:
De meest elegante en eenvoudigste van de hierboven genoemde bibliotheken is Requests. In dit artikel gebruiken we de verzoekbibliotheek. Gebruik de volgende opdracht om de Requests-bibliotheek te downloaden en te installeren:
pip install requestsEen Get-verzoek indienen
In het bovenstaande voorbeeld wordt de breedtegraad, lengtegraad en het opgemaakte adres van een bepaalde locatie gevonden door een GET-verzoek naar de Google Maps API te sturen. Een API (Application Programming Interface) biedt u beperkte toegang tot de interne functies van een programma. En in de meeste gevallen zijn de verstrekte gegevens binnen JSON (JavaScript-objectnotatie) formaat (dat is geïmplementeerd als woordenboekobjecten in 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))
Uitgang:
Belangrijke punten om af te leiden:
PARAMS = {'address':location}De URL voor een GET-verzoek bevat doorgaans enkele parameters. Voor de verzoeken kunnen bibliotheekparameters worden gedefinieerd als een woordenboek. Deze parameters worden later ontleed en toegevoegd aan de basis-URL of het API-eindpunt. Probeer af te drukken om de rol van de parameter te begrijpen r.url nadat het antwoordobject is gemaakt. Je zult zoiets als dit zien:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityDit is de daadwerkelijke URL waarop het GET-verzoek wordt gedaan
r = requests.get(url = URL params = PARAMS)Hier maken we een responsobject 'r' waarin het verzoek-antwoord wordt opgeslagen. We gebruiken de methode request.get() omdat we een GET-verzoek verzenden. De twee argumenten die we doorgeven zijn URL en het parameterwoordenboek.
data = r.json()Om de gegevens uit het responsobject op te halen, moeten we nu de onbewerkte responsinhoud converteren naar een gegevensstructuur van het JSON-type. Dit wordt bereikt door de methode json() te gebruiken. Ten slotte extraheren we de vereiste informatie door het JSON-type object te ontleden.
Een POST-verzoek indienen
In dit voorbeeld wordt uitgelegd hoe u uw broncode naar pastebin.com door een POST-verzoek naar de PASTEBIN API te sturen. Allereerst moet u een API-sleutel genereren door hier aanmelden en vervolgens toegang krijgen tot uw API-sleutel hier.
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)
Belangrijke kenmerken van deze code:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Ook hier zullen we wat gegevens moeten doorgeven aan de API-server. Wij slaan deze gegevens op als woordenboek.
r = requests.post(url = API_ENDPOINT data = data)Hier maken we een responsobject 'r' waarin het verzoek-antwoord wordt opgeslagen. We gebruiken de methode request.post() omdat we een POST-verzoek verzenden. De twee argumenten die we doorgeven zijn de URL en de datadictionary.
pastebin_url = r.textAls reactie verwerkt de server de gegevens die ernaar worden verzonden en verzendt de pastebin_URL van uw broncode die eenvoudig toegankelijk is via r.tekst.
verzoeken.post methode kan voor veel andere taken worden gebruikt, maar ook voor het invullen en verzenden van webformulieren die op uw FB-tijdlijn worden geplaatst met behulp van de Facebook Graph API enz.
Hier zijn enkele belangrijke punten om over na te denken:
- Wanneer de methode GET is, worden alle formuliergegevens gecodeerd in de URL en toegevoegd aan de actie URL als querytekenreeksparameters. Met POST-formuliergegevens verschijnen binnen de berichttekst van het HTTP-verzoek.
- In de GET-methode zijn de parametergegevens beperkt tot wat we in de verzoekregel (URL) kunnen stoppen. Het is het veiligst om minder dan 2K aan parameters te gebruiken. Sommige servers verwerken tot 64K. Dit probleem is er niet bij de POST-methode, aangezien we gegevens verzenden in de berichttekst van het HTTP-verzoek, niet van de URL.
- Voor het verzenden van gegevens in de GET-methode zijn alleen ASCII-tekens toegestaan. Er is geen dergelijke beperking in de POST-methode.
- GET is minder veilig vergeleken met POST omdat de verzonden gegevens deel uitmaken van de URL. De GET-methode mag dus niet worden gebruikt bij het verzenden van wachtwoorden of andere gevoelige informatie.