12.3. 步入 SOAP
Description: Python from novice to pro
Keywords: Python, Dive Into Python, tutorial, object-oriented, programming, documentation, book, free

# 深入 Python :Dive Into Python 中文版 Python 从新手到专家 [Dip_5.4b_CPyUG_Release] | Find:

## 12.3. 步入 SOAP

调用远程函数是 SOAP 的核心功能。有很多提供公开 SOAP 访问的服务器提供用于展示的简单功能。

最受欢迎的 SOAP 公开访问服务器是 http://www.xmethods.net/。这个例子使用了一个展示函数，可以根据美国邮政编码返回当地气温。

### 例 12.6. 获得现在的气温

    >>> from SOAPpy import SOAPProxy
    >>> url = 'http://services.xmethods.net:80/soap/servlet/rpcrouter'
    >>> namespace = 'urn:xmethods-Temperature'
    >>> server = SOAPProxy(url, namespace)
    >>> server.getTemp('27502')
    80.0

| 你通过 `SOAPProxy` 这个代理 (proxy) 类访问远程 SOAP 服务器。这个代理处理了所有的 SOAP 内部事务，其中包括：根据函数名和参数列表创建 XML 请求文档，并将这个请求文档通过 HTTP 发送到远程 SOAP 服务器；解析 XML 返回文档，并创建本地的 Python 返回值。在下一节中你将看到这个 XML 文档。
| 每个 SOAP 服务都有一个 URL 用以处理所有请求。相同的 URL 可以用于所有的函数请求。每个特定服务则只有一个函数。但稍后你将看到的 Google API 却有多个函数。这个服务的 URL 提供给所有函数分享。每个 SOAP 服务都有一个命名空间 (namespace)，这个命名空间是由服务器任意命名的。这不过是为调用 SOAP 方法设置的。它使得服务器让多个不相关的服务共享服务 URL 和路径请求成为可能。这与 Python 中模块相对于包的关系类似。
| 这里你创建了包含服务 URL 和服务命名空间的 `SOAPProxy`。此时还不会连接到 SOAP 服务器；仅仅是建立了一个本地 Python 对象。
| 到此为止，如果你的设置完全正确，应该可以向调用本地函数一样调用远程 SOAP 方法。这和给普通函数传递参数并接收返回值一样，但在背后却隐藏着很多的工作。

让我们看一看这些背后的工作。