Python - HTTP-запросы
HTTP или протокол передачи гипертекста работает по модели клиент-сервер. Обычно веб-браузер является клиентом, а компьютер, на котором размещен веб-сайт, является сервером. В python мы используем модуль запросов для создания HTTP-запросов. Это очень мощный модуль, который может обрабатывать многие аспекты HTTP-связи, помимо простых данных запроса и ответа. Он может обрабатывать аутентификацию, сжатие / распаковку, запросы по фрагментам и т. Д.
HTTP-клиент отправляет HTTP-запрос на сервер в форме сообщения запроса, которое включает в себя следующий формат:
- Строка запроса
- Ноль или более полей заголовка (General | Request | Entity), за которыми следует CRLF
- Пустая строка (т.е. строка, в которой ничего не предшествует CRLF), указывающая конец полей заголовка.
- Необязательно тело сообщения
В следующих разделах объясняется каждый из объектов, используемых в сообщении HTTP-запроса.
Строка запроса
Строка запроса начинается с токена метода, за которым следует Request-URI и версия протокола, и заканчивается CRLF. Элементы разделяются пробелами SP.
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Давайте обсудим каждую из частей, упомянутых в строке запроса.
Метод запроса
Запрос method указывает метод, который будет выполняться на ресурсе, идентифицированном данным Request-URI. Этот метод чувствителен к регистру, и его всегда следует указывать в верхнем регистре. В следующей таблице перечислены все методы, поддерживаемые в HTTP / 1.1.
SN | Метод и описание |
---|---|
1 | GET Метод GET используется для получения информации с заданного сервера с использованием заданного URI. Запросы, использующие GET, должны только извлекать данные и не должны иметь никакого другого влияния на данные. |
2 | HEAD То же, что и GET, но передает только строку состояния и раздел заголовка. |
3 | POST Запрос POST используется для отправки данных на сервер, например информации о клиенте, загрузки файлов и т. Д., С использованием HTML-форм. |
4 | PUT Заменяет все текущие представления целевого ресурса загруженным контентом. |
5 | DELETE Удаляет все текущие представления целевого ресурса, заданные URI. |
6 | CONNECT Устанавливает туннель к серверу, идентифицированному заданным URI. |
7 | OPTIONS Опишите варианты коммуникации для целевого ресурса. |
8 | TRACE Выполняет обратный тест цикла сообщений вместе с путем к целевому ресурсу. |
Request-URI
Request-URI - это универсальный идентификатор ресурса, который определяет ресурс, к которому следует применить запрос. Ниже приведены наиболее часто используемые формы для указания URI:
Request-URI = "*" | absoluteURI | abs_path | authority
SN | Метод и описание |
---|---|
1 | Звездочка *используется, когда HTTP-запрос применяется не к определенному ресурсу, а к самому серверу, и разрешен только в том случае, если используемый метод не обязательно применим к ресурсу. Например: OPTIONS * HTTP/1.1 |
2 | В absoluteURIиспользуется при отправке HTTP-запроса к прокси. Прокси-сервер запрашивается для пересылки запроса или службы из действительного кеша и возврата ответа. Например: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
3 | Наиболее распространенная форма Request-URI - это та, которая используется для идентификации ресурса на исходном сервере или шлюзе. Например, клиент, желающий получить ресурс непосредственно с исходного сервера, должен создать TCP-соединение с портом 80 хоста «www.w3.org» и отправить следующие строки: GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org Обратите внимание, что абсолютный путь не может быть пустым; если в исходном URI ничего нет, он ДОЛЖЕН быть указан как «/» (корень сервера). |
Использование запросов Python
Мы будем использовать запросы модуля для изучения http-запроса.
pip install requests
В приведенном ниже примере мы видим случай простого запроса GET и распечатки результата ответа. Мы решили печатать только первые 300 символов.
# How to make http request
import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]
Когда мы запускаем указанную выше программу, мы получаем следующий результат -
<!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