Запросы HTTPS/HTTP
Ren'Py поддерживает получение информации по HTTP и HTTPS с помощью функции renpy.fetch. Эта функция:
Поддерживает GET, POST и PUT-запросы.
Поддерживает отправку на сервер данных или json-объектов через POST или PUT.
Может возвращать результат в виде байтов, строки или json-объекта.
Функция fetch предназначена для использования в основном потоке Ren'Py после запуска игры. Её можно использовать на десктопах, мобильных устройствах и на веб-платформе. При использовании на веб-платформе, если запрос идёт не на тот же сервер, который изначально обслуживал игру, сервер должен поддерживать CORS.
В качестве очень простого примера, вот так можно получить новости с сервера:
$ news = renpy.fetch("https://example.com/news.txt", result="text")
"Вот новости: [news]"
А вот так можно отправить JSON на сервер и получить JSON в ответ:
$ result = renpy.fetch("https://example.com/api", json={"name": "Ren'Py"}, result="json")
Как и в любом приложении, которое взаимодействует по сети, при использовании renpy.fetch необходимо учитывать вопросы безопасности, особенно при отображении полученных таким образом медиафайлов. (Ren'Py в целом не защищён от вредоносных изображений, видео- и аудиофайлов.)
- renpy.fetch(url, method=None, data=None, json=None, content_type=None, timeout=5, result='bytes', params=None, headers={})
Выполняет HTTP (или HTTPS) запрос по указанному URL и возвращает содержимое этого запроса. В случае сбоя вызывает исключение FetchError с текстом, описывающим сбой. (Однако этот текст может быть не предназначен для показа пользователю.)
- url
URL для запроса.
- method
Используемый метод. Обычно один из "GET", "POST" или "PUT", но возможны и другие методы HTTP. Если data или json не равны None, по умолчанию используется "POST", в противном случае — GET.
- data
Если не None, байтовая строка данных для отправки с запросом.
- json
Если не None, объект JSON для отправки с запросом. Имеет приоритет над data.
- content_type
Тип содержимого данных. Если не указан, по умолчанию используется "application/json", если json не None, или "application/octet-stream" в противном случае. Используется только в запросах POST или PUT.
- timeout
Количество секунд ожидания завершения запроса.
- result
Способ обработки результата. Если "bytes", возвращает необработанные байты результата. Если "text", декодирует результат с использованием UTF-8 и возвращает строку unicode. Если "json", декодирует результат как JSON. (В процессе декодирования могут возникать другие исключения.)
- params
Словарь параметров, которые добавляются к URL в виде строки запроса.
- headers
Словарь заголовков для отправки с запросом.
Эту функцию можно вызывать как внутри, так и вне интерактивного контекста.
Вне интерактивного контекста, в ожидании истечения timeout, эта функция будет многократно вызывать
renpy.pause(), чтобы Ren'Py не зависал. Имеет смысл показать пользователю экран, информирующий о происходящем.Внутри интерактивного контекста (например, внутри Action), эта функция заблокирует систему отображения до тех пор, пока запрос не завершится или не истечёт время ожидания. Она будет пытаться обслуживать аудиосистему, поэтому звук продолжит воспроизводиться.
Эта функция должна работать на всех платформах. Однако на веб-платформе запросы, направленные на источник, отличный от источника игры, завершатся неудачей, если это не разрешено CORS.
Requests
На десктопах и мобильных устройствах Ren'Py включает библиотеку Requests.
Она более мощная, но интегрируется не так хорошо, как renpy.fetch.
(Например, Ren'Py вызовет renpy.pause() для ожидания данных, в то время как
requests заблокирует выполнение, что может привести к таким проблемам, как прерывание звука.)