Python - żądania HTTP
Protokół HTTP lub Hyper Text Transfer Protocol działa w modelu klient-serwer. Zwykle przeglądarka internetowa jest klientem, a komputer obsługujący witrynę jest serwerem. W pythonie używamy modułu requestów do tworzenia żądań http. Jest to bardzo potężny moduł, który może obsługiwać wiele aspektów komunikacji http poza prostymi danymi dotyczącymi żądań i odpowiedzi. Może obsługiwać uwierzytelnianie, kompresję / dekompresję, podzielone żądania itp.
Klient HTTP wysyła żądanie HTTP do serwera w postaci komunikatu żądania, który zawiera następujący format:
- Linia zapytań
- Zero lub więcej pól nagłówka (General | Request | Entity), po których następuje CRLF
- Pusty wiersz (tj. Wiersz bez niczego przed CRLF) wskazujący koniec pól nagłówka
- Opcjonalnie treść wiadomości
W poniższych sekcjach wyjaśniono każdą z jednostek używanych w komunikacie żądania HTTP.
Linia zapytań
Wiersz żądania zaczyna się od tokenu metody, po którym następuje identyfikator URI żądania i wersja protokołu, a kończy się na CRLF. Elementy oddzielone są spacjami SP.
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Omówmy każdą z części wymienionych w Request-Line.
Metoda żądania
Prośba method wskazuje metodę, która ma zostać wykonana na zasobie określonym przez dane Request-URI. W metodzie rozróżniana jest wielkość liter i zawsze należy ją podawać wielkimi literami. W poniższej tabeli wymieniono wszystkie obsługiwane metody w protokole HTTP / 1.1.
SN | Metoda i opis |
---|---|
1 | GET Metoda GET służy do pobierania informacji z danego serwera przy użyciu danego URI. Żądania korzystające z GET powinny tylko pobierać dane i nie powinny mieć żadnego innego wpływu na dane. |
2 | HEAD To samo co GET, ale przenosi tylko wiersz stanu i sekcję nagłówka. |
3 | POST Żądanie POST służy do wysyłania danych na serwer, na przykład informacji o kliencie, przesyłania plików itp. Za pomocą formularzy HTML. |
4 | PUT Zastępuje wszystkie bieżące reprezentacje zasobu docelowego przesłaną treścią. |
5 | DELETE Usuwa wszystkie bieżące reprezentacje zasobu docelowego podane przez identyfikator URI. |
6 | CONNECT Ustanawia tunel do serwera identyfikowanego przez dany identyfikator URI. |
7 | OPTIONS Opisz opcje komunikacji dla zasobu docelowego. |
8 | TRACE Wykonuje test zwrotny pętli komunikatów wraz ze ścieżką do zasobu docelowego. |
Identyfikator URI żądania
Identyfikator URI żądania jest jednolitym identyfikatorem zasobu i identyfikuje zasób, do którego należy zastosować żądanie. Poniżej przedstawiono najczęściej używane formularze do określenia identyfikatora URI:
Request-URI = "*" | absoluteURI | abs_path | authority
SN | Metoda i opis |
---|---|
1 | Gwiazdka *jest używany, gdy żądanie HTTP nie dotyczy określonego zasobu, ale samego serwera i jest dozwolone tylko wtedy, gdy zastosowana metoda niekoniecznie ma zastosowanie do zasobu. Na przykład: OPTIONS * HTTP/1.1 |
2 | Plik absoluteURIjest używany, gdy żądanie HTTP jest kierowane do serwera proxy. Proxy jest proszone o przekazanie żądania lub usługi z prawidłowej pamięci podręcznej i zwrócenie odpowiedzi. Na przykład: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
3 | Najpopularniejszą formą identyfikatora URI żądania jest ta, która służy do identyfikowania zasobu na serwerze pochodzenia lub bramie. Na przykład klient, który chciałby pobrać zasób bezpośrednio z serwera pochodzenia, utworzyłby połączenie TCP z portem 80 hosta „www.w3.org” i wysłałby następujące wiersze: GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org Zwróć uwagę, że ścieżka bezwzględna nie może być pusta; jeśli nie ma go w oryginalnym URI, MUSI być podany jako „/” (root serwera). |
Korzystanie z żądań Pythona
Będziemy używać zapytań modułu do nauki o żądaniu http.
pip install requests
W poniższym przykładzie widzimy przypadek prostego żądania GET i wypisuje wynik odpowiedzi. Decydujemy się wydrukować tylko pierwsze 300 znaków.
# How to make http request
import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]
Po uruchomieniu powyższego programu otrzymujemy następujące dane wyjściowe -
<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!--> <html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial