Python - odpowiedź 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. Po otrzymaniu żądania od klienta serwer generuje odpowiedź i odsyła ją do klienta w określonym formacie.
Po otrzymaniu i zinterpretowaniu komunikatu żądania serwer odpowiada komunikatem odpowiedzi HTTP:
- A Status-line
- Zero or more header (General|Response|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
W poniższych sekcjach wyjaśniono każdą z jednostek używanych w komunikacie odpowiedzi HTTP.
Wiadomość Status-Line
Linia statusu składa się z wersji protokołu, po której następuje numeryczny kod statusu i powiązana fraza tekstowa. Elementy oddzielone są spacjami SP.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Wersja HTTP
Serwer obsługujący protokół HTTP w wersji 1.1 zwróci następujące informacje o wersji:
HTTP-Version = HTTP/1.1
Kod statusu
Element Status-Code to 3-cyfrowa liczba całkowita, gdzie pierwsza cyfra Status-Code określa klasę odpowiedzi, a ostatnie dwie cyfry nie pełnią żadnej roli kategoryzacji. Pierwsza cyfra ma 5 wartości:
SN | Kod i opis |
---|---|
1 | 1xx: Informational Oznacza to, że żądanie zostało odebrane i proces jest kontynuowany. |
2 | 2xx: Success Oznacza to, że działanie zostało pomyślnie odebrane, zrozumiane i zaakceptowane. |
3 | 3xx: Redirection Oznacza to, że należy podjąć dalsze działania w celu uzupełnienia wniosku. |
4 | 4xx: Client Error Oznacza to, że żądanie zawiera nieprawidłową składnię lub nie może zostać spełnione. |
5 | 5xx: Server Error Oznacza to, że serwer nie spełnił pozornie ważnego żądania. |
Kody stanu HTTP można rozszerzać, a aplikacje HTTP nie muszą rozumieć znaczenia wszystkich zarejestrowanych kodów stanu.
Korzystanie z żądań Pythona
W poniższym programie w Pythonie używamy modułu urllib3 do wykonania żądania http GET i otrzymania odpowiedzi zawierającej dane. Zapewnia również kod odpowiedzi, który jest również zarządzany przez funkcje w module. Obiekt PoolManager obsługuje wszystkie szczegóły buforowania połączeń, a także obsługuje bezpieczeństwo wątków.
import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'http://tutorialspoint.com/robots.txt')
print resp.data
# get the status of the response
print resp.status
Po uruchomieniu powyższego programu otrzymujemy następujące dane wyjściowe -
User-agent: *
Disallow: /tmp
Disallow: /logs
Disallow: /rate/*
Disallow: /cgi-bin/*
Disallow: /videotutorials/video_course_view.php?*
Disallow: /videotutorials/course_view.php?*
Disallow: /videos/*
Disallow: /*/*_question_bank/*
Disallow: //*/*/*/*/src/*
200