Blog JSystems - uwalniamy wiedzę!

Szukaj
Animacja requests - żądanie i odpowiedź HTTP
Wysyłasz żądanie do serwera, dostajesz odpowiedź ze statusem i danymi

Pobieranie danych za pomocą GET

Usługi sieciowe służą do wymiany informacji za pomocą protokołu HTTP. Zwykle ten protokół wykorzystywany jest do przesyłania stron internetowych, ale zamiast kodu HTML mogą także zostać przesłane dane w formacie np. JSON czy XML. Usługi sieciowe mogą nie tylko zwracać jakieś dane, ale również je odbierać. W ten sposób często integrowane są systemy napisane w różnych językach programowania czy różne autonomiczne elementy jednej aplikacji, zwłaszcza na fali ostatniej mody na mikroserwisy.

Do obsługi usług sieciowych w Pythonie mamy moduł "requests", który trzeba zaimportować do naszego skryptu zanim zaczniemy z niego korzystać. Poniżej przykład korzystania z takich danych zdalnych. Wprawdzie użyte tutaj wywołanie http prowadzi do pliku statycznego, ale w zasadzie nie ma to znaczenia, bo pod tym adresem równie dobrze mogłaby znajdować się usługa sieciowa która zwróciłaby dane w takiej samej formie:

import requests
odpowiedz=requests.get("http://jsystems.pl/static/blog/python/dane.json",auth=('user','pass'))
print(odpowiedz.status_code)
dane = odpowiedz.json()
print(dane)

Nawiązanie połączenia z usługą odbywa się za pomocą funkcji "get" która za parametr przyjmuje adres usługi. Zwraca ona obiekt odpowiedzi zawierający same dane, ale też dodatkowe informacje nagłówkowe. Jedną z takich informacji jest naprzykład kod statusu, który tu wyświetlam w linii 3. Kod o numerze 200 oznacza prawidłową odpowiedź. To są te same statusy co i przy każdym innym wywołaniu http - czyli np. 404 oznacza brak zasobu do którego się odwołujemy. W funkcji get pojawia się tu jeszcze jeden parametr - auth. Jest on opcjonalny, służy do ewentualnej autoryzacji która w tym przypadku jest całkiem zbędna.

Sam obiekt odpowiedzi jest obiektem opakowującym, dlatego jeśli zechcemy wydłubać z niego dane wywołujemy dodatkowo funkcję "json" która to zwraca nam je w formacie słownika. Wynik działania:

{'imie': 'Andrzej', 'nazwisko': 'Klusiewicz', 'adres': {'miasto': 'Warszawa', 'kod': '02-019'}, 'jezyki': ['polski', 'angielski', 'Java', 'R', 'Python', 'PL/SQL']}

Gdybym się zechciał dobrać do konkretnej wartości w danych, to dalej postępuję tak jak z każdymi innymi danymi zawartymi w strukturze słownika. Poniżej przykład odczytania miasta z adresu zawartego w zwróconych danych:

import requests
odpowiedz=requests.get("http://jsystems.pl/static/blog/python/dane.json")
dane = odpowiedz.json()
print(dane['adres']['miasto'])

Przesyłanie danych za pomocą POST

Do przesyłania danych do usług sieciowych wykorzystujemy ten sam moduł. Przygotowałem sobie pusty słownik "dane" który następnie przesyłam do usługi sieciowej za pomocą funkcji "post". Funkcja ta poza adresem i danymi przyjmuje również parametr "headers" który służy do przekazywania informacji m.in o typie zawartości przesłanych informacji. Podobnie jak funkcja "get" przyjmuje również parametr "auth" którego tu jednak nie użyłem:

import requests
dane=dict()
odpowiedzWysylka=requests.post("http://jsystems.pl/static/blog/python/dane.json",data=dane,headers={"Content-Type":"application/json"})
print(odpowiedzWysylka.status_code)
Szkolenie Python od podstaw, przez analizę danych, do machine learning w JSystems

Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.

Szkolenie Python od podstaw, przez analizę danych, do machine learning

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Do czego służą usługi sieciowe w Pythonie?
Usługi sieciowe służą do wymiany informacji przez protokół HTTP. Zamiast kodu HTML mogą przesyłać dane w formatach takich jak JSON czy XML. Często integruje się dzięki nim systemy napisane w różnych językach lub autonomiczne elementy jednej aplikacji, zwłaszcza w architekturze mikroserwisów.
Jakiego modułu używa się do obsługi żądań HTTP w Pythonie?
Do obsługi usług sieciowych służy moduł requests, który trzeba zaimportować przed użyciem. Udostępnia on funkcje takie jak get do pobierania danych i post do ich wysyłania, obie przyjmujące adres usługi jako parametr.
Jak pobrać dane z usługi sieciowej metodą GET?
Wywołujesz funkcję get z adresem usługi, która zwraca obiekt odpowiedzi zawierający dane oraz nagłówki. Kod statusu odczytasz przez status_code, gdzie 200 oznacza poprawną odpowiedź, a 404 brak zasobu. Same dane wydobywasz funkcją json, która zwraca je w formie słownika.
Do czego służy parametr auth w funkcji get?
Parametr auth służy do ewentualnej autoryzacji przy połączeniu z usługą sieciową i jest opcjonalny. Jeśli usługa nie wymaga uwierzytelniania, można go pominąć.
Jak wysłać dane do usługi sieciowej metodą POST?
Używasz funkcji post z tego samego modułu requests, przekazując adres oraz dane, na przykład słownik. Funkcja przyjmuje też parametr headers, którym określasz między innymi typ zawartości, na przykład Content-Type ustawione na application/json. Kod odpowiedzi odczytasz przez status_code.
Jak dobrać się do zagnieżdżonej wartości w danych JSON?
Po pobraniu danych funkcją json otrzymujesz słownik, z którym postępujesz jak z każdą inną strukturą słownikową. Do zagnieżdżonej wartości sięgasz przez kolejne klucze w nawiasach kwadratowych, na przykład dane pod kluczem adres, a w nim pod kluczem miasto.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...