Команда ReQL: http
Синтаксис команды
r.http(url[, options]) → value r.http(url[, options]) → stream
Описание
Получает данные из указанного URL-адреса по протоколу HTTP. Тип возвращаемого значения зависит от параметра result_format, который по умолчанию проверяет Content-Type ответа. Убедитесь, что вы никогда не используете эту команду для URL-адресов, предоставленных пользователем.
Пример: Выполните HTTP GET и сохраните результат в таблице.
r.table('posts').insert(r.http('http://httpbin.org/get')).run(conn)
См. учебник по r.http для получения дополнительных примеров использования этой команды.
Параметры
Общие параметры
-
timeout: время ожидания в секундах до прерывания соединения (по умолчанию30). -
attempts: количество попыток повторного подключения после неудачных соединений (по умолчанию5). -
redirects: количество редиректов и заголовков расположения для перехода (по умолчанию1). -
verify: еслиtrue, проверять сертификат SSL сервера (по умолчаниюtrue). -
result_format: строка, определяющая формат возвращаемых результатов. Один из следующих:-
text: всегда возвращать строку. -
json: анализировать результат как JSON, вызывая ошибку при неудаче. -
jsonp: анализировать результат как JSONP. -
binary: вернуть двоичный объект. -
auto: анализировать результат на основе егоContent-Type(по умолчанию):-
application/json: какjson -
application/json-p,text/json-p,text/javascript: какjsonp -
audio/*,video/*,image/*,application/octet-stream: какbinary - в противном случае: как
text
-
-
Параметры запроса
-
method: HTTP-метод для использования в запросе. Один изGET,POST,PUT,PATCH,DELETEилиHEAD. По умолчанию:GET. -
auth: объект, предоставляющий аутентификацию, с следующими полями:-
type:basic(по умолчанию) илиdigest -
user: имя пользователя -
pass: пароль в текстовом виде
-
-
params: объект, определяющий параметры URL для добавления в URL в виде закодированных пар ключ/значение.{ 'query': 'banana', 'limit': 2 }будут добавлены как?query=banana&limit=2. По умолчанию: нет параметров. -
header: Дополнительные строки заголовков для включения. Значение может быть массивом строк или объектом. По умолчанию:Accept-Encoding: deflate;q=1, gzip;q=0.5иUser-Agent: RethinkDB/<VERSION>. -
data: Данные, которые необходимо отправить на сервер при запросеPOST,PUT,PATCH, илиDELETE. Для запросовPOST, данные могут быть либо объектом (который будет записан в тело в виде закодированных пар ключ/значение), либо строкой; для всех остальных запросов данные будут сериализованы как JSON и помещены в тело запроса, отправленного какContent-Type: application/json. По умолчанию: данные не будут отправлены.
Пример: Выполните несколько запросов с разными параметрами.
r.expr([1, 2, 3]).map(
lambda i: r.http('http://httpbin.org/get', params={'user': i})
).run(conn)
Пример: Выполните запрос PUT для каждого элемента в таблице.
r.table('data').map(
lambda row: r.http('http://httpbin.org/put', method='PUT', data=row)
).run(conn)
Пример: Выполните запрос POST с сопровождающими данными.
Использование данных в формате form-encoded:
r.http('http://httpbin.org/post', method='POST',
data={'player': 'Bob', 'game': 'tic tac toe'}
).run(conn)
Использование данных в формате JSON:
r.http('http://httpbin.org/post', method='POST',
data=r.expr(value).coerce_to('string'),
header={'Content-Type': 'application/json'}
).run(conn)
Пагинация
r.http поддерживает пагинацию, которая будет запрашивать несколько страниц подряд и агрегировать результаты в поток. Использование этой функции контролируется необязательными аргументами page и page_limit. Должны быть предоставлены либо ни один, либо оба этих аргумента.
-
page: Этот параметр может указывать либо встроенную стратегию пагинации (см. ниже), либо функцию для предоставления следующего URL-адреса и/илиparamsдля запроса. -
page_limit: Целое число, определяющее максимальное количество запросов, которые необходимо выполнить с использованием функциональностиpage. Это необходимо для предотвращения перегрузки лимитов API, и оно должно быть указано сpage.-
-1: без ограничения -
0: запросы не будут выполнены, будет возвращён пустой поток -
n: будет выполненоnзапросов
-
В настоящее время единственной встроенной стратегией является 'link-next', которая эквивалентна lambda info: info['header']['link']['rel="next"'].default(None).
Пример: Выполните поиск в GitHub и соберите до 3 страниц результатов.
r.http("https://api.github.com/search/code?q=addClass+user:mozilla",
page='link-next', page_limit=3).run(conn)
В качестве функции, page принимает один параметр, объект в формате:
{
'params': object, # the URL parameters used in the last request
'header': object, # the HTTP headers of the last response as key/value pairs
'body': value # the body of the last response in the format specified by `result_format`
}
Поле header будет содержать обработанную версию заголовка с полями в нижнем регистре, например:
{
'content-length': '1024',
'content-type': 'application/json',
'date': 'Thu, 1 Jan 1970 00:00:00 GMT',
'link': {
'rel="last"': 'http://example.com/?page=34',
'rel="next"': 'http://example.com/?page=2'
}
}
Функция page может возвращать строку, соответствующую следующему URL-адресу для запроса, None указывая, что больше нет данных, или объект в формате:
{
'url': string, # the next URL to request, or None for no more pages
'params': object # new URL parameters to use, will be merged with the previous request's params
}
Пример: Выполните пагинацию с настраиваемой функцией page.
r.http('example.com/pages',
page=(lambda info: info['body']['meta']['next'].default(None)),
page_limit=5
).run(conn)
Дополнительная информация
См. учебник по r.http для получения дополнительных примеров использования этой команды.
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/http/