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