W tym poście omówiono dwie metody żądań HTTP (Hypertext Transfer Protocol) żądania GET i POST w Pythonie oraz ich implementację w Pythonie.
Co to jest HTTP?
HTTP to zestaw protokołów zaprojektowanych w celu umożliwienia komunikacji pomiędzy klientami i serwerami. Działa jako protokół żądanie-odpowiedź pomiędzy klientem a serwerem. Przeglądarka internetowa może być klientem, a aplikacja na komputerze, na którym znajduje się witryna internetowa, może być serwerem. Aby poprosić serwer o odpowiedź, istnieją głównie dwie metody:
- DOSTAWAĆ : Aby zażądać danych z serwera.
- POST : Aby przesłać dane do przetworzenia na serwer.
Oto prosty diagram wyjaśniający podstawową koncepcję metod GET i POST.
Teraz, aby wykonać żądania HTTP w Pyton możemy użyć kilku bibliotek HTTP, takich jak:
Najbardziej elegancką i najprostszą z wyżej wymienionych bibliotek jest Requests. W tym artykule będziemy korzystać z biblioteki żądań. Aby pobrać i zainstalować bibliotekę Requests, użyj następującego polecenia:
pip install requestsWykonywanie żądania Get
Powyższy przykład wyszukuje szerokość geograficzną i sformatowany adres danej lokalizacji, wysyłając żądanie GET do API Map Google. Jakiś API (interfejs programowania aplikacji) umożliwia dostęp do wewnętrznych funkcji programu w ograniczony sposób. W większości przypadków podane dane są w JSON (notacja obiektu JavaScript) format (który jest zaimplementowany jako obiekty słownikowe w Pythonie!).
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))
Wyjście:
Ważne punkty do wyciągnięcia:
PARAMS = {'address':location}Adres URL żądania GET zazwyczaj zawiera pewne parametry. Dla żądań parametry biblioteki można zdefiniować jako słownik. Parametry te są później analizowane i dodawane do podstawowego adresu URL lub punktu końcowego interfejsu API. Aby zrozumieć rolę parametru spróbuj wydrukować r.url po utworzeniu obiektu odpowiedzi. Zobaczysz coś takiego:
http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+universityTo jest rzeczywisty adres URL, pod którym wysyłane jest żądanie GET
r = requests.get(url = URL params = PARAMS)Tutaj tworzymy obiekt odpowiedzi „r”, który będzie przechowywać żądanie-odpowiedź. Używamy metody request.get(), ponieważ wysyłamy żądanie GET. Dwa argumenty, które przekazujemy, to adres URL i słownik parametrów.
data = r.json()Teraz, aby pobrać dane z obiektu odpowiedzi, musimy przekonwertować surową treść odpowiedzi na strukturę danych typu JSON. Osiąga się to za pomocą metody json(). Na koniec wyodrębniamy wymagane informacje, analizując obiekt typu JSON.
Wysyłanie żądania POST
Ten przykład wyjaśnia, jak wkleić plik kod_źródłowy Do pastebin.com wysyłając żądanie POST do API PASTEBIN. Przede wszystkim będziesz musiał wygenerować klucz API według zarejestruj się tutaj a następnie uzyskaj dostęp do pliku Klucz API tutaj.
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)
Ważne cechy tego kodu:
data = {'api_dev_key':API_KEY
'api_option':'paste'
'api_paste_code':source_code
'api_paste_format':'python'}
Tutaj ponownie będziemy musieli przekazać pewne dane do serwera API. Przechowujemy te dane w formie słownika.
r = requests.post(url = API_ENDPOINT data = data)Tutaj tworzymy obiekt odpowiedzi „r”, który będzie przechowywać żądanie-odpowiedź. Używamy metody request.post(), ponieważ wysyłamy żądanie POST. Dwa argumenty, które przekazujemy, to adres URL i słownik danych.
pastebin_url = r.textW odpowiedzi serwer przetwarza przesłane do niego dane i wysyła adres URL pastebin_URL Twojego kod_źródłowy do których można łatwo uzyskać dostęp r.tekst.
żądania.post Metodę tę można wykorzystać do wielu innych zadań, takich jak wypełnianie i przesyłanie formularzy internetowych publikowanych na osi czasu FB za pomocą interfejsu API Facebook Graph itp.
Oto kilka ważnych kwestii, nad którymi warto się zastanowić:
- Gdy metodą jest GET, wszystkie dane formularza są kodowane w adresie URL i dołączane do pliku działanie Adres URL jako parametry ciągu zapytania. W przypadku formularza POST dane pojawiają się w pliku treść wiadomości żądania HTTP.
- W metodzie GET dane parametrów ograniczają się do tego, co możemy umieścić w wierszu żądania (URL). Najbezpieczniej jest używać mniej niż 2 tys. parametrów, niektóre serwery obsługują do 64 tys. Nie ma takiego problemu w metodzie POST, ponieważ wysyłamy dane w formacie treść wiadomości żądania HTTP, a nie adresu URL.
- Dane przesyłane metodą GET dozwolone są wyłącznie znaki ASCII. W metodzie POST nie ma takiego ograniczenia.
- GET jest mniej bezpieczny w porównaniu do POST, ponieważ wysyłane dane są częścią adresu URL. Dlatego metody GET nie należy używać podczas wysyłania haseł lub innych poufnych informacji.