Python - HTTP-ответ
HTTP или протокол передачи гипертекста работает по модели клиент-сервер. Обычно веб-браузер является клиентом, а компьютер, на котором размещен веб-сайт, является сервером. При получении запроса от клиента сервер генерирует ответ и отправляет его обратно клиенту в определенном формате.
После получения и интерпретации сообщения запроса сервер отвечает сообщением ответа 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
В следующих разделах объясняется каждый из объектов, используемых в ответном сообщении HTTP.
Строка состояния сообщения
Строка состояния состоит из версии протокола, за которым следует числовой код состояния и связанная с ним текстовая фраза. Элементы разделяются пробелами SP.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Версия HTTP
Сервер, поддерживающий HTTP версии 1.1, вернет следующую информацию о версии:
HTTP-Version = HTTP/1.1
Код состояния
Элемент Status-Code представляет собой трехзначное целое число, где первая цифра Status-Code определяет класс ответа, а последние две цифры не имеют роли категоризации. Первая цифра имеет 5 значений:
SN | Код и описание |
---|---|
1 | 1xx: Informational Это означает, что запрос был получен и процесс продолжается. |
2 | 2xx: Success Это означает, что действие было успешно получено, понято и принято. |
3 | 3xx: Redirection Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия. |
4 | 4xx: Client Error Это означает, что запрос содержит неверный синтаксис или не может быть выполнен. |
5 | 5xx: Server Error Это означает, что серверу не удалось выполнить явно действительный запрос. |
Коды состояния HTTP являются расширяемыми, и приложения HTTP не обязаны понимать значение всех зарегистрированных кодов состояния.
Использование запросов Python
В приведенной ниже программе на Python мы используем модуль urllib3, чтобы сделать HTTP-запрос GET и получить ответ, содержащий данные. Он также предоставляет код ответа, которым также управляют функции модуля. Объект PoolManager обрабатывает все детали создания пула соединений, а также обеспечивает безопасность потоков.
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
Когда мы запускаем указанную выше программу, мы получаем следующий результат -
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