Версия:

Модуль http

Модуль http

Общие сведения

Модуль http, в частности вложенный модуль http.client , обеспечивать функциональные возможности HTTP-клиента с поддержкой HTTPS и механизма поддержания в активном состоянии keepalive. Модуль использует процедуры из библиотеки libcurl.

Индекс

Ниже приведен перечень всех функций модуля http.

Имя Использование
http.client.new() Создание экземпляра HTTP-клиента
client_object:request() Выполнение HTTP-запроса
client_object:stat() Получение таблицы со статистикой
http.client.new([options])

Создание нового экземпляра HTTP-клиента.

Параметры:
  • options (table) – максимальное количество записей в кэше соединения.
возвращается:

новый экземпляр HTTP-клиента

тип возвращаемого значения:
 

пользовательские данные

Пример:

tarantool> http_client = require('http.client').new({max_connections = 5})
---
...
object client_object
client_object:request(method, url, body, opts)

Если http_client – это экземпляр HTTP-клиента, http_client:request() выполнит HTTP-запрос, и в случае успешного подключения вернет таблицу с информацией о подключении.

Параметры:
  • method (string) – HTTP-метод, например „GET“, „POST“ или „PUT“
  • url (string) – расположение, например „https://tarantool.org/doc
  • body (string) – необязательное начальное сообщение, например „My text string!“
  • opts (table) –

    таблица с параметрами подключения, которые могут содержать любые из следующих компонентов:

    • timeout – количество секунд ожидания API-запроса curl на чтение до превышения времени ожидания
    • ca_path – путь к директории, где хранятся один или более сертификатов для проверки подключенного узла
    • ca_file – путь к SSL-сертификату для проверки подключенного узла
    • verify_host – включение/отключение проверки имени сертификата (CN) для хоста. См. также CURLOPT_SSL_VERIFYHOST
    • verify_peer – включение/отключение проверки SSL-сертификата подключенного узла. См. также CURLOPT_SSL_VERIFYPEER
    • ssl_key – путь к файлу закрытого ключа для клиентского TSL-сертификата и SSL-сертификата. См. также CURLOPT_SSLKEY
    • ssl_cert – путь к файлу клиентского SSL-сертификата. См. также CURLOPT_SSLCERT
    • headers – таблица HTTP-заголовков
    • keepalive_idle – время задержки в секундах, в течение которого операционная система находится в режиме ожидания подключения до отправки сообщений для поддержания в активном состоянии keepalive. См. также CURLOPT_TCP_KEEPALIVE
    • keepalive_interval – время интервала в секундах, в течение которого операционная система находится в режиме ожидания между отправкой сообщений keepalive. См. также CURLOPT_TCP_KEEPALIVE
    • low_speed_time – установка «времени работы с низкой скоростью» – времени, в течение которого скорость передачи должна быть ниже «предела низкой скорости», чтобы библиотека посчитала работу слишком медленной и завершила ее. См. также CURLOPT_LOW_SPEED_TIME
    • low_speed_limit – установка «предела низкой скорости» – средней скорости передачи в байтах в секунду, ниже которой должна быть скорость передачи, чтобы библиотека посчитала работу слишком медленной и завершила ее. См. также CURLOPT_LOW_SPEED_LIMIT
    • verbose – включение/отключение режима отображения подробной информации
    • unix_socket - a socket name to use instead of an Internet address, for a local connection. The Tarantool server must be built with libcurl 7.40 or later. See the second example later in this section.
    • max_header_name_len - the maximal length of a header name. If a header name is bigger than this value, it is truncated to this length. The default value is „32“.
возвращается:

информация о подключении со всеми следующими компонентами:

  • status – статус HTTP-ответа
  • reason – текст статуса HTTP-ответа
  • headers – Lua-таблица с нормализованными HTTP-заголовками
  • body – тело сообщения-ответа
  • proto – версия протокола
тип возвращаемого значения:
 

таблица

Для запросов существуют следующие ускоренные методы:

  • http_client:get(url, options) – ускоренный метод для http_client:request("GET", url, nil, opts)
  • http_client:post (url, body, options) – ускоренный метод для http_client:request("POST", url, body, opts)
  • http_client:put(url, body, options) – ускоренный метод для http_client:request("POST", url, body, opts)
  • http_client:patch(url, body, options) – ускоренный метод для http_client:request("PATCH", url, body, opts)
  • http_client:options(url, options) – ускоренный метод для http_client:request("OPTIONS", url, nil, opts)
  • http_client:head(url, options) – ускоренный метод для http_client:request("HEAD", url, nil, opts)
  • http_client:delete(url, options) – ускоренный метод для http_client:request("DELETE", url, nil, opts)
  • http_client:trace(url, options) – ускоренный метод для http_client:request("TRACE", url, nil, opts)
  • http_client:connect:(url, options) – ускоренный метод для http_client:request("CONNECT", url, nil, opts)
client_object:stat()

Функция http_client:stat() возвращает таблицу со статистическими данными:

  • active_requests – количество активно выполняемых запросов
  • sockets_added – общее количество сокетов, добавленных в событийный цикл
  • sockets_deleted – общее количество сокетов, удаленных из событийного цикла
  • total_requests – общее количество запросов
  • http_200_responses – общее количество запросов, которые вернули код состояния HTTP 200
  • http_other_responses – общее количество запросов, которые не вернули код состояния HTTP 200
  • failed_requests – общее количество невыполненных запросов, включая системные ошибки, ошибки curl и HTTP-ошибки

Пример 1:

Подключение к HTTP-серверу, просмотр размера ответа на „GET“-запрос и просмотр статистики по сессии.

tarantool> http_client = require('http.client').new()
 ---
 ...
 tarantool> r = http_client:request('GET','http://tarantool.org')
 ---
 ...
 tarantool> string.len(r.body)
 ---
 - 21725
 ...
 tarantool> http_client:stat()
 ---
 - total_requests: 1
   sockets_deleted: 2
   failed_requests: 0
   active_requests: 0
   http_other_responses: 0
   http_200_responses: 1
   sockets_added: 2

Пример 2:

Start two Tarantool instances on the same computer.

On the first Tarantool instance, listen on a Unix socket:

box.cfg{listen='/tmp/unix_domain_socket.sock'}

On the second Tarantool instance, send via http_client:

box.cfg{}
http_client = require('http.client').new({5})
http_client:put('http://localhost/','body',{unix_socket = '/tmp/unix_domain_socket.sock'})

Terminal #1 will show an error message: «Invalid MsgPack». This is not useful but demonstrates the syntax and demonstrates that was sent was received.