Недавно случайно наткнулся на httr2
, т.е. Хедли работает над новым интерфейсом для взаимодействия с различными API.
Установить httr2
пока можно только с GitHub: devtools::install_github("r-lib/httr2")
Ключевые отличия httr2
от предшественника httr
:
● Теперь вы можете создавать и изменять запрос, не выполняя его. Это означает, что теперь есть одна функция для выполнения запроса и получения результата: req_perform()
. (Если вы хотите обрабатывать ответ по мере его поступления, используйте вместо этого req_stream()
). req_perform()
заменяет httr::GET()
, httr::POST()
, httr::DELETE()
и т.д.
● Ошибки HTTP автоматически преобразуются в ошибки R. Используйте req_error()
, чтобы переопределить значения по умолчанию (которые превращают все ответы 4xx и 5xx в ошибки) или добавить дополнительные сведения в сообщение об ошибке.
● Вы можете автоматически повторить попытку, если запрос завершится неудачно или возникнет временная ошибка HTTP (например, запрос столкнулся с каким то лимитом, код ошибки 429). req_retry()
определяет максимальное количество повторных попыток, какие статусы ответа являются временными и задавать паузу между попытками отправки запросов.
● Поддержка OAuth была полностью переработана, чтобы напрямую поддерживать гораздо больше потоков и упростить как настройку встроенных потоков, так и создание собственных.
● Улучшена работа с секретными данными, для этого используйте функции семейства secret_*()
.
● Вы можете автоматически кэшировать все кешируемые результаты с помощью req_cache()
.
Сам синтаксис нового httr2
стал более читабельным, ниже приведу описание основных функций:
● Компоновка запроса
- request()
- создание запроса
- req_headers()
- добавить заголовки
- req_url_query()
- добавить параметры
- req_method()
- изменить метод запроса, по умолчанию GET
- req_body_*()
- создания тела запроса
- req_perform()
- отправка запроса
- req_dry_run()
- предпросмотрт запроса, перед отправкой на сервер
- req_retry()
- позволяет задать условия выполнения повторного запроса, в случае ошибки
● Извлечение компонентов ответа
- resp_body_*()
- извлечь тело ответа
- resp_status()
- извлечь код статуса
- resp_status_desc()
- извлечь описание кода статуса
- resp_headers()
- извлечь заголовки ответа
- resp_content_type()
- узнать формат данных полученного ответа
Ниже приведу небольшой пример кода с использованием httr2
.
# install.packages("devtools")Ссылки:
# devtools::install_github("r-lib/httr2")
library(httr2)
request('http://httpbin.org/post') %>%
req_method("POST") %>%
req_body_json(list(a = 1, b = 2, c = 3)) %>%
req_headers(Name = "Alexey") %>%
req_perform() %>%
resp_body_json()
- README на GitHub
#заметки_по_R
>>Click here to continue<<