Документация Python неофициальный перевод

xmlrpc.server.md

362 строк · 19.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.0/library/xmlrpc.server.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `xmlrpc.server` – Базовые XML-RPC серверы89Модуль `xmlrpc.server` предоставляет базовую серверную структуру для XML-RPC серверов, написанных на Python. Серверы могут быть как автономными (с использованием [`SimpleXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCServer)), так и встроенными в CGI-среду (с помощью [`CGIXMLRPCRequestHandler`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.CGIXMLRPCRequestHandler)).1011#### `[xmlrpc.server.SimpleXMLRPCServer]class xmlrpc.server.SimpleXMLRPCServer(addr[, requestHandler[, logRequests[, allow_none[, encoding[, bind_and_activate]]]]])`1213Создаёт новый экземпляр сервера. Этот класс предоставляет методы для регистрации функций, которые могут быть вызваны по протоколу XML-RPC. Параметр1415*requestHandler*1617должен быть фабрикой для экземпляров обработчика запросов; по умолчанию используется1819[`SimpleXMLRPCRequestHandler`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCRequestHandler)2021. Параметры2223*addr*2425и2627*requestHandler*2829передаются конструктору3031`socketserver.TCPServer`3233. Если3435*logRequests*3637равен true (по умолчанию), запросы будут логироваться; установка этого параметра в false отключит логирование. Параметры3839*allow\_none*4041и4243*encoding*4445передаются4647[`xmlrpc.client`](https://python-all.ru/3.0/library/xmlrpc.client.html#module-xmlrpc.client)4849и управляют XML-RPC ответами, которые будут возвращены сервером. Параметр5051*bind\_and\_activate*5253определяет, будут ли5455`server_bind()`5657и5859`server_activate()`6061вызваны сразу в конструкторе; по умолчанию true. Если установить false, это позволит коду изменить переменную класса6263*allow\_reuse\_address*6465до привязки адреса.6667#### `[xmlrpc.server.CGIXMLRPCRequestHandler]class xmlrpc.server.CGIXMLRPCRequestHandler([allow_none[, encoding]])`6869Создаёт новый экземпляр для обработки XML-RPC запросов в CGI-среде. Параметры7071*allow\_none*7273и7475*encoding*7677передаются7879[`xmlrpc.client`](https://python-all.ru/3.0/library/xmlrpc.client.html#module-xmlrpc.client)8081и управляют XML-RPC ответами, которые будут возвращены сервером.8283#### `[xmlrpc.server.SimpleXMLRPCRequestHandler]class xmlrpc.server.SimpleXMLRPCRequestHandler`8485Создаёт новый экземпляр обработчика запросов. Этот обработчик поддерживает8687`POST`8889запросы и изменяет регистрацию (логирование) так, чтобы учитывался параметр9091*logRequests*9293конструктора9495[`SimpleXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCServer)9697.9899## Объекты SimpleXMLRPCServer100101Класс [`SimpleXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCServer) основан на `socketserver.TCPServer` и предоставляет способ создания простых автономных XML-RPC серверов.102103#### `[xmlrpc.server.SimpleXMLRPCServer.register_function]SimpleXMLRPCServer.register_function(function[, name])`104105Регистрирует функцию, которая может отвечать на XML-RPC запросы. Если задан106107*name*108109, то это будет имя метода, связанное с110111*function*112113; в противном случае будет использоваться114115`function.__name__`116117.118119*name*120121может быть как обычной, так и Unicode строкой, и может содержать символы, недопустимые в Python-идентификаторах, включая точку.122123#### `[xmlrpc.server.SimpleXMLRPCServer.register_instance]SimpleXMLRPCServer.register_instance(instance[, allow_dotted_names])`124125Регистрирует объект, который используется для раскрытия имён методов, не зарегистрированных с помощью [`register_function()`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCServer.register_function). Если *instance* содержит метод `_dispatch()`, то он вызывается с именем запрошенного метода и параметрами из запроса. Его API: `def _dispatch(self, method, params)` (обратите внимание, что *params* не представляет собой список переменных аргументов). Если он вызывает некоторую базовую функцию для выполнения задачи, эта функция вызывается как `func(*params)`, с разворачиванием списка параметров. Возвращаемое значение из `_dispatch()` возвращается клиенту в качестве результата. Если *instance* не имеет метода `_dispatch()`, то в нём ищется атрибут, соответствующий имени запрошенного метода.126127Если необязательный аргумент *allow\_dotted\_names* равен true и экземпляр не имеет метода `_dispatch()`, то в случае, если имя запрошенного метода содержит точки, каждый компонент имени метода ищется отдельно, что приводит к выполнению простого иерархического поиска. Найденное значение затем вызывается с параметрами из запроса, а возвращаемое значение передаётся обратно клиенту.128129> **Предупреждение**130>131> Включение опции *allow\_dotted\_names* позволяет злоумышленникам получить доступ к глобальным переменным вашего модуля и может позволить им выполнить произвольный код на вашей машине. Используйте эту опцию только в безопасной закрытой сети.132133#### `[xmlrpc.server.SimpleXMLRPCServer.register_introspection_functions]SimpleXMLRPCServer.register_introspection_functions()`134135Регистрирует функции интроспекции XML-RPC:136137`system.listMethods`138139,140141`system.methodHelp`142143и144145`system.methodSignature`146147.148149#### `[xmlrpc.server.SimpleXMLRPCServer.register_multicall_functions]SimpleXMLRPCServer.register_multicall_functions()`150151Регистрирует функцию мультивызова XML-RPC system.multicall.152153#### `[xmlrpc.server.SimpleXMLRPCRequestHandler.rpc_paths]SimpleXMLRPCRequestHandler.rpc_paths`154155Значение атрибута, которое должно быть кортежем, перечисляющим допустимые части пути URL для приёма XML-RPC запросов. Запросы, отправленные на другие пути, приведут к HTTP-ошибке 404 «страница не найдена». Если этот кортеж пуст, все пути считаются допустимыми. Значение по умолчанию –156157`('/', '/RPC2')`158159.160161### Пример SimpleXMLRPCServer162163Код сервера:164165```python166from xmlrpc.server import SimpleXMLRPCServer167from xmlrpc.server import SimpleXMLRPCRequestHandler168169# Ограничить конкретным путём.170class RequestHandler(SimpleXMLRPCRequestHandler):171    rpc_paths = ('/RPC2',)172173# Создать сервер174server = SimpleXMLRPCServer(("localhost", 8000),175                            requestHandler=RequestHandler)176server.register_introspection_functions()177178# Зарегистрировать функцию pow(); будет использовано значение179# pow.__name__ как имя, то есть просто 'pow'.180server.register_function(pow)181182# Зарегистрировать функцию под другим именем183def adder_function(x,y):184    return x + y185server.register_function(adder_function, 'add')186187# Зарегистрировать экземпляр; все методы экземпляра188# опубликованы как методы XML-RPC (в данном случае просто 'div').189class MyFuncs:190    def div(self, x, y):191        return x // y192193server.register_instance(MyFuncs())194195# Запустить главный цикл сервера196server.serve_forever()197```198199Следующий клиентский код будет вызывать методы, предоставленные предыдущим сервером:200201```python202import xmlrpc.client203204s = xmlrpc.client.ServerProxy('http://localhost:8000')205print(s.pow(2,3))  # Возвращает 2**3 = 8206print(s.add(2,3))  # Возвращает 5207print(s.mul(5,2))  # Возвращает 5*2 = 10208209# Вывести список доступных методов210print(s.system.listMethods())211```212213## CGIXMLRPCRequestHandler214215Класс [`CGIXMLRPCRequestHandler`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.CGIXMLRPCRequestHandler) может использоваться для обработки XML-RPC запросов, отправленных в CGI-сценарии Python.216217#### `[xmlrpc.server.CGIXMLRPCRequestHandler.register_function]CGIXMLRPCRequestHandler.register_function(function[, name])`218219Регистрирует функцию, которая может отвечать на запросы XML-RPC. Если указан220221*name*222223, он будет именем метода, ассоциированного с функцией, в противном случае будет использовано224225*function.\_\_name\_\_*226227.228229*name*230231может быть обычной или Unicode-строкой и может содержать символы, недопустимые в идентификаторах Python, включая точку.232233#### `[xmlrpc.server.CGIXMLRPCRequestHandler.register_instance]CGIXMLRPCRequestHandler.register_instance(instance)`234235Регистрирует объект, который используется для раскрытия имён методов, не зарегистрированных с помощью236237[`register_function()`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.CGIXMLRPCRequestHandler.register_function)238239. Если экземпляр содержит метод240241`_dispatch()`242243, он вызывается с именем запрошенного метода и параметрами из запроса; возвращаемое значение возвращается клиенту в качестве результата. Если экземпляр не имеет метода244245`_dispatch()`246247, то в нём ищется атрибут, соответствующий имени запрошенного метода; если имя запрошенного метода содержит точки, каждый компонент имени метода ищется отдельно, что приводит к выполнению простого иерархического поиска. Найденное значение затем вызывается с параметрами из запроса, а возвращаемое значение передаётся обратно клиенту.248249#### `[xmlrpc.server.CGIXMLRPCRequestHandler.register_introspection_functions]CGIXMLRPCRequestHandler.register_introspection_functions()`250251Регистрирует функции интроспекции XML-RPC:252253`system.listMethods`254255,256257`system.methodHelp`258259и260261`system.methodSignature`262263.264265#### `[xmlrpc.server.CGIXMLRPCRequestHandler.register_multicall_functions]CGIXMLRPCRequestHandler.register_multicall_functions()`266267Регистрирует функцию мультивызова XML-RPC268269`system.multicall`270271.272273#### `[xmlrpc.server.CGIXMLRPCRequestHandler.handle_request]CGIXMLRPCRequestHandler.handle_request([request_text = None])`274275Обрабатывает XML-RPC-запрос. Если передан276277*request\_text*278279, это должны быть POST-\\nданные, предоставленные HTTP-сервером; в противном случае используется содержимое stdin.280281Пример:282283```python284class MyFuncs:285    def div(self, x, y) : return x // y286287handler = CGIXMLRPCRequestHandler()288handler.register_function(pow)289handler.register_function(lambda x,y: x+y, 'add')290handler.register_introspection_functions()291handler.register_instance(MyFuncs())292handler.handle_request()293```294295## Документирование сервера XMLRPC296297Эти классы расширяют приведённые выше классы для обслуживания HTML-документации в ответ\\nна HTTP GET-запросы. Серверы могут быть либо автономными, использующими\\n[`DocXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.DocXMLRPCServer), либо встроенными в CGI-среду, использующими\\n[`DocCGIXMLRPCRequestHandler`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.DocCGIXMLRPCRequestHandler).298299#### `[xmlrpc.server.DocXMLRPCServer]class xmlrpc.server.DocXMLRPCServer(addr[, requestHandler[, logRequests[, allow_none[, encoding[, bind_and_activate]]]]])`300301Создаёт новый экземпляр сервера. Все параметры имеют то же значение, что и для\\n302303[`SimpleXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCServer)304305;306307*requestHandler*308309по умолчанию равен\\n310311[`DocXMLRPCRequestHandler`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.DocXMLRPCRequestHandler)312313.314315#### `[xmlrpc.server.DocCGIXMLRPCRequestHandler]class xmlrpc.server.DocCGIXMLRPCRequestHandler`316317Создаёт новый экземпляр для обработки XML-RPC запросов в CGI-среде.318319#### `[xmlrpc.server.DocXMLRPCRequestHandler]class xmlrpc.server.DocXMLRPCRequestHandler`320321Создаёт новый экземпляр обработчика запросов. Этот обработчик поддерживает POST-запросы XML-RPC, GET-запросы документации и настраивает протоколирование так, чтобы значение параметра322323*logRequests*324325конструктора326327[`DocXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.DocXMLRPCServer)328329учитывалось.330331## Объекты DocXMLRPCServer332333Класс [`DocXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.DocXMLRPCServer) является производным от [`SimpleXMLRPCServer`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCServer)\\nи предоставляет способ создания самодокументированных автономных XML-RPC-серверов. HTTP POST-запросы обрабатываются как вызовы методов XML-RPC. HTTP GET-запросы обрабатываются путём генерации HTML-документации в стиле pydoc. Это позволяет серверу предоставлять собственную веб-документацию.334335#### `[xmlrpc.server.DocXMLRPCServer.set_server_title]DocXMLRPCServer.set_server_title(server_title)`336337Устанавливает заголовок, используемый в сгенерированной HTML-документации. Этот заголовок будет использоваться внутри элемента HTML «title».338339#### `[xmlrpc.server.DocXMLRPCServer.set_server_name]DocXMLRPCServer.set_server_name(server_name)`340341Устанавливает имя, используемое в сгенерированной HTML-документации. Это имя будет отображаться в верхней части сгенерированной документации внутри элемента «h1».342343#### `[xmlrpc.server.DocXMLRPCServer.set_server_documentation]DocXMLRPCServer.set_server_documentation(server_documentation)`344345Устанавливает описание, используемое в сгенерированной HTML-документации. Это описание будет отображаться в виде абзаца, под именем сервера, в документации.346347## DocCGIXMLRPCRequestHandler348349Класс [`DocCGIXMLRPCRequestHandler`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.DocCGIXMLRPCRequestHandler) является производным от\\n[`CGIXMLRPCRequestHandler`](https://python-all.ru/3.0/library/xmlrpc.server.html#xmlrpc.server.CGIXMLRPCRequestHandler) и предоставляет способ создания\\nсамодокументированных XML-RPC CGI-скриптов. HTTP POST-запросы обрабатываются как вызовы методов XML-RPC. HTTP GET-запросы обрабатываются путём генерации HTML-документации в стиле pydoc. Это позволяет серверу предоставлять собственную веб-документацию.350351#### `[xmlrpc.server.DocCGIXMLRPCRequestHandler.set_server_title]DocCGIXMLRPCRequestHandler.set_server_title(server_title)`352353Устанавливает заголовок, используемый в сгенерированной HTML-документации. Этот заголовок будет использоваться внутри элемента HTML «title».354355#### `[xmlrpc.server.DocCGIXMLRPCRequestHandler.set_server_name]DocCGIXMLRPCRequestHandler.set_server_name(server_name)`356357Устанавливает имя, используемое в сгенерированной HTML-документации. Это имя будет отображаться в верхней части сгенерированной документации внутри элемента «h1».358359#### `[xmlrpc.server.DocCGIXMLRPCRequestHandler.set_server_documentation]DocCGIXMLRPCRequestHandler.set_server_documentation(server_documentation)`360361Устанавливает описание, используемое в сгенерированной HTML-документации. Это описание будет отображаться в виде абзаца, под именем сервера, в документации.362