非常教程

Python参考手册

网络 | Internet

SimpleXMLRPCServer

注意

SimpleXMLRPCServer模块已被合并到Python 3中。当将源代码转换为Python 3时xmlrpc.server,2to3工具将自动适应导入。

2.2版本中的新功能。

源代码: Lib / SimpleXMLRPCServer.py

SimpleXMLRPCServer模块为使用Python编写的XML-RPC服务器提供了一个基本的服务器框架。服务器可以独立使用SimpleXMLRPCServer,也可以嵌入CGI环境中使用CGIXMLRPCRequestHandler

class SimpleXMLRPCServer.SimpleXMLRPCServer(addr[, requestHandler[, logRequests[, allow_none[, encoding[, bind_and_activate]]]])

创建一个新的服务器实例。该类提供了可以由XML-RPC协议调用的函数注册方法。所述requestHandler参数应至少为请求处理程序实例的工厂; 它默认为SimpleXMLRPCRequestHandler。该地址requestHandler参数传递给SocketServer.TCPServer构造函数。如果logRequests为true(缺省值),则会记录请求; 将此参数设置为false将关闭日志记录。该ALLOW_NONE编码参数传递到xmlrpclib并控制从服务器返回的XML-RPC响应。该bind_and_activate参数控制是否server_bind()server_activate()由构造函数立即调用; 它默认为true。将其设置为false允许代码在绑定地址之前操作allow_reuse_address类变量。

在版本2.5中进行了更改:添加了allow_none编码参数。

在版本2.6中更改:添加了bind_and_activate参数。

class SimpleXMLRPCServer.CGIXMLRPCRequestHandler([allow_none[, encoding]])

创建一个新的实例来处理CGI环境中的XML-RPC请求。该ALLOW_NONE编码参数传递到xmlrpclib并控制从服务器返回的XML-RPC响应。

2.3版本的新功能。

在版本2.5中进行了更改:添加了allow_none编码参数。

class SimpleXMLRPCServer.SimpleXMLRPCRequestHandler

创建一个新的请求处理器实例。此请求处理程序支持POST请求并修改日志记录,以便遵守SimpleXMLRPCServer构造函数参数的logRequests参数。

1. SimpleXMLRPCServer对象

SimpleXMLRPCServer基于类SocketServer.TCPServer,并提供创建简单的手段,独立的XML-RPC服务器。

SimpleXMLRPCServer.register_function(function[, name])

注册一个可以响应XML-RPC请求的函数。如果给出名称,它将是与函数关联的方法名称,否则function.__name__将被使用。名称可以是普通字符串或Unicode字符串,也可以包含Python标识符中不合法的字符,包括句点字符。

SimpleXMLRPCServer.register_instance(instance[, allow_dotted_names])

注册一个用来暴露尚未使用的方法名称的对象register_function()。如果实例包含_dispatch()方法,则使用请求的方法名称和请求中的参数调用它。它的API是def _dispatch(self, method, params)(注意params不代表可变参数列表)。如果它调用一个底层函数来执行它的任务,那么这个函数被称为func(*params)扩展参数列表。_dispatch()作为结果,返回值将返回给客户端。如果实例没有_dispatch()方法,则会搜索与请求的方法的名称匹配的属性。

如果可选的allow_dotted_names参数为true并且该实例没有_dispatch()方法,那么如果请求的方法名称包含句点,则会单独搜索方法名称的每个组件,结果会执行简单的分层搜索。然后使用请求中的参数调用此搜索中找到的值,并将返回值传回客户端。

警告

启用allow_dotted_names选项允许入侵者访问您的模块的全局变量,并可能允许入侵者在您的机器上执行任意代码。只能在安全的封闭网络上使用此选项。

在版本2.3.5中更改:2.4.1 allow_dotted_names被添加到插入安全漏洞; 以前的版本是不安全的。

SimpleXMLRPCServer.register_introspection_functions()

注册XML-RPC内省功能system.listMethodssystem.methodHelpsystem.methodSignature

2.3版本的新功能。

SimpleXMLRPCServer.register_multicall_functions()

注册XML-RPC多重函数system.multicall。

SimpleXMLRPCRequestHandler.rpc_paths

一个属性值,必须是列出用于接收XML-RPC请求的URL的有效路径部分的元组。发布到其他路径的请求将导致404“无此页”HTTP错误。如果此元组为空,则所有路径都将被视为有效。默认值是('/', '/RPC2')

2.5版本中的新功能。

SimpleXMLRPCRequestHandler.encode_threshold

如果此属性不是,则在客户端允许的情况下,None将使用gzip传输编码对大于此值的响应进行编码。默认值1400大致对应于单个TCP数据包。

2.7版本的新功能。

1.1。SimpleXMLRPCServer示例

服务器代码:

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
                            requestHandler=RequestHandler)
server.register_introspection_functions()

# Register pow() function; this will use the value of
# pow.__name__ as the name, which is just 'pow'.
server.register_function(pow)

# Register a function under a different name
def adder_function(x,y):
    return x + y
server.register_function(adder_function, 'add')

# Register an instance; all the methods of the instance are
# published as XML-RPC methods (in this case, just 'div').
class MyFuncs:
    def div(self, x, y):
        return x // y

server.register_instance(MyFuncs())

# Run the server's main loop
server.serve_forever()

以下客户端代码将调用上述服务器提供的方法:

import xmlrpclib

s = xmlrpclib.ServerProxy('http://localhost:8000')
print s.pow(2,3)  # Returns 2**3 = 8
print s.add(2,3)  # Returns 5
print s.div(5,2)  # Returns 5//2 = 2

# Print list of available methods
print s.system.listMethods()

以下SimpleXMLRPCServer示例包含在模块中Lib/SimpleXMLRPCServer.py

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(pow)
server.register_function(lambda x,y: x+y, 'add')
server.register_multicall_functions()
server.serve_forever()

这个演示服务器可以从命令行运行如下:

python -m SimpleXMLRPCServer

与上述服务器交谈的示例客户端代码包含在以下内容中Lib/xmlrpclib.py

server = ServerProxy("http://localhost:8000")
print server
multi = MultiCall(server)
multi.pow(2, 9)
multi.add(5, 1)
multi.add(24, 11)
try:
    for response in multi():
        print response
except Error, v:
    print "ERROR", v

并且可以使用以下命令直接调用客户端:

python -m xmlrpclib

2. CGIXMLRPCRequestHandler

CGIXMLRPCRequestHandler班可用于处理发送到Python的CGI脚本XML-RPC请求。

CGIXMLRPCRequestHandler.register_function(function[, name])

注册一个可以响应XML-RPC请求的函数。如果给出名称,它将是与函数关联的方法名称,否则将使用 _function .__ name__ 。_name可以是普通字符串或Unicode字符串,也可以包含Python标识符中不合法的字符,包括句点字符。

CGIXMLRPCRequestHandler.register_instance(instance)

注册一个用来暴露尚未使用的方法名称的对象register_function()。如果实例包含_dispatch()方法,则使用请求的方法名称和请求中的参数调用该方法; 返回值作为结果返回给客户端。如果实例没有_dispatch()方法,则会搜索与请求方法的名称匹配的属性; 如果请求的方法名称包含句点,则会单独搜索方法名称的每个组件,从而执行简单的分层搜索。然后使用请求中的参数调用此搜索中找到的值,并将返回值传回客户端。

CGIXMLRPCRequestHandler.register_introspection_functions()

注册XML-RPC内省功能system.listMethodssystem.methodHelpsystem.methodSignature

CGIXMLRPCRequestHandler.register_multicall_functions()

注册XML-RPC multicall函数system.multicall

CGIXMLRPCRequestHandler.handle_request([request_text = None])

处理XML-RPC请求。如果给出request_text,它应该是由HTTP服务器提供的POST数据,否则将使用stdin的内容。

例:

class MyFuncs:
    def div(self, x, y): return x // y


handler = CGIXMLRPCRequestHandler()
handler.register_function(pow)
handler.register_function(lambda x,y: x+y, 'add')
handler.register_introspection_functions()
handler.register_instance(MyFuncs())
handler.handle_request()
Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法