65.9K
CodeProject 正在变化。 阅读更多。
Home

PHP 中的 Web 服务客户端和服务器演示

starIconstarIconstarIconstarIconstarIcon

5.00/5 (14投票s)

2009年8月27日

CPOL

6分钟阅读

viewsIcon

146679

downloadIcon

9007

6 个完全不同的 Web 服务的演示,也包括 SOAP。

引言

本文演示了不同的 webservice 如何工作。文章面向初学者,因此源代码保持简单。

  • 源代码包含 6 个不同的 webservice 客户端和 2 个 webservice 服务器
  • 所有示例均使用 PHP 5 编程,因此可在 Windows 和 Linux 上运行。
  • 有些示例通过 GET 发送请求,有些则使用 POST
  • 有些示例通过 URL 发送请求,有些则使用 SOAP
  • 代码不使用任何 PHP Soap 库,因为目的是从零开始展示如何构建和发送 HTTP 请求。
  • 此外,本文还展示了如何解析 XML 响应以及如何使用 XPath
  • 示例基于一个可重用的webservice 客户端类
  • 代码的目的是展示 webservice 的基础知识。WSDL 等复杂主题不包含在内。
  • 如果您从未用过 PHP,您将在文章末尾找到一个新手教程,介绍如何在 Windows 上安装和运行示例。

阅读本文并研究示例后,您会注意到没有两个 webservice 是完全相同的。它们都具有自己独特的特性

Webservice 客户端 Yahoo Maps

此示例演示了如何将地址发送到 Yahoo Maps webservice,该服务将返回 GPS 坐标(经度和纬度)。

此 webservice 通过 URL 中的 GET 参数接收参数。
客户端演示了如何使用XPath 从返回的 XML 数据中提取数据。

服务器: http://local.yahooapis.com/MapsService/V1/geocode

请求:

街道 = 701 First Ave, 城市 = New York, 州 = NY

响应
--- 结果 1 ---
精度: address
地址:   701 1st Ave
邮编:       11232
纬度:  40.656335
经度: -74.012770

Webservice 客户端 Weather

此示例演示了如何获取世界上 10,000 个城市之一的当前天气数据。
每个城市都由一个城市代码表示(例如,荷兰阿姆斯特丹的 NLXX0002)。
您可以选择以摄氏度、千米、千米/小时和毫巴或华氏度、英里、英里/小时、英寸显示结果。
您还可以获得未来 10 天的逐时或每日天气预报。但为保持示例简单,此处未包含。

此 webservice 通过 URL 中的 GET 参数接收参数。
客户端演示了如何使用XPath 从返回的 XML 数据中提取数据。

服务器: http://xml.weather.com/weather/local

请求:

城市 = NLXX0002, 预报天数 = 0, 单位 = 欧洲

响应
地点:     阿姆斯特丹, 荷兰
本地时间: 下午 5:53
日出:       上午 6:40
日落:        晚上 8:44
经度:  4.90
纬度:     52.35



天气:                     部分多云
温度:        18°C
体感温度:         18°C
露点:               13°C
气压:           1010.8 mb
湿度:           73%
能见度:            10.0 km
风速:      21 km/h
风向: WSW
紫外线指数:           2


月相: 渐盈眉月
气象站: 阿姆斯特丹, 荷兰

Webservice 客户端 Amazon SimpleDB

此 webservice 连接到 Amazon 的数据库 webservice。

在继续阅读之前,请屏住呼吸,忘记您所知道的关于 Amazon 的一切!!此 webservice 与您可以在 Amazon 上购买的任何产品(如书籍、CD 或 DVD)完全无关。

Amazon 提供了一个 webservice,允许您将任何类型的数据存储在他们的 Web 数据库服务器上,您可以在其中创建自己的私有数据库(域)。这样,您就可以编写(Web)应用程序,将数据存储在 Amazon 数据库中。优点是您可以从世界各地访问此数据库,可以存储大量数据(如视频文件),并且 Amazon 提供直接连接到互联网骨干网的快速服务器。显然,此服务不是免费的。
在源代码中,您可以找到订阅的 URL 以及获取您需要的私钥和公钥的 URL。但如果您没有使用有效的账单信息(例如万事达卡)进行订阅,即使您拥有有效的密钥并且每月前 1GB 流量是免费的,您仍然会收到错误。

此示例很有趣,因为它展示了客户端如何进行验证。为了防止其他人使用您付费的帐户,所有对服务器的请求都必须包含用于标识您的公钥,并且所有数据字段必须使用您的私钥进行签名。签名是通过 PHP 命令 hash_hmac() 完成的。

操作“CreateDomain”将创建一个名为“TestDomain”的新数据库。
请求还必须发送有效的 UTC 时间戳。如果时间错误,服务器将拒绝请求。数据通过 POST 发送。

服务器: https://sdb.amazonaws.com

请求:
操作                     = CreateDomain
AWSAccessKeyId = AIWMFIAEQGPKI3LFRADW
DomainName        = TestDomain
SignatureMethod = HmacSHA256
SignatureVersion = 1
Timestamp            = 2009-08-25T15:57:40.000Z
Version                   = 2009-04-15
Signature               = Xp3QbA4G4Ws41aZ7LX80i8Z4WRqL6LmsIKX9P8DLluY=

Webservice 客户端 + 服务器数学计算

此示例是客户端和服务器的组合。
它展示了编写 webservice 服务器是多么简单。

服务器和客户端都运行在localhost

它的功能非常简单:客户端发送一个数学运算(如加法或乘法)和两个数字。
服务器计算结果并将其作为 XML 返回。
数据通过 POST 发送。

请求
Operation = Multiply
Value1      = 21
Value2      = 3

响应
Result      = 63

Webservice 客户端 + 服务器字符串操作

此示例与上一个类似,但它使用了SOAP
客户端发送一个字符串,服务器对其执行一个操作,例如反转字符串或将其转换为大写。

服务器和客户端都运行在localhost

对于许多 SOAP 服务器,设置 HTTP 头部字段SOAPAction”很重要。
您发送一个 XML 文档,其中也可能包含一个 XML 字段“SOAPAction”,而服务器又要求设置 HTTP 头部,这似乎不合逻辑。
但是,根据服务器的不同,如果缺少此 HTTP 头部,您可能会收到错误。

请求

POST /webservice/Server_Soap.php HTTP/1.0
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: 260
SOAPAction: STR_RevertRQ
User-Agent: PHP WebService Client

<?xml version="1.0"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <STR_RevertRQ>
           <Message>This is a little Text</Message>
       </STR_RevertRQ>
    </soapenv:Body>
</soapenv:Envelope>

响应

<?xml version="1.0"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <STR_RevertRS TimeStamp="1251219075">
            <Message>txeT elttil a si sihT</Message>
        </STR_RevertRS>
    </soapenv:Body>
</soapenv:Envelope>

Webservice 客户端 Sabre

Sabre 是一个为旅游业提供航班和酒店数据的 webservice。您可以通过此 webservice 预订航班、酒店和租车。Sabre 是 Open Travel Alliance (OTA) 的成员。

显然,您必须订阅并支付此服务费用。开发人员文档仅对付费客户可用。

服务器: https://webservices.sabre.com/websvc

此示例向服务器发送一个 OTA_PingRQ,这是 OTA 命令列表中最简单的命令。
服务器应响应 OTA_PingRS,该响应会回显相同的字符串。
我从未成功过。如果您知道如何修复它,请给我发电子邮件!

如何在 Windows 上运行示例

  1. 首先,请检查您的 PC 上是否有任何程序正在使用端口 80 运行服务器。
    如果您安装了 Skype,请确保在“工具 -> 选项 -> 连接”菜单下,不要勾选“使用端口 80 和 443 作为传入连接的备用端口”复选框!
  2. 其次,请检查您的浏览器是否配置了 HTTP 代理服务器。如果配置了,请将其关闭!
  3. 安装 Wamp Server,它将 Apache、mySql 和 PHP 安装到C:\Program Files\Wamp
  4. 打开文件 C:\Program Files\Wamp\bin\apache\Apachex.y.z\bin\php.ini
    并移除行 ;extension=php_openssl.dll 前面的分号。
  5. 之后,从开始菜单启动服务器。您会在系统托盘中看到一个新的图标,您可以单击它以打开配置菜单。
    但无需配置任何内容:Wamp 开箱即用。
  6. 将 CodeProject 的 ZIP 文件中的整个内容复制到文件夹 C:\Program Files\Wamp\www\webservice
  7. 如果操作正确,此文件将存在:C:\Program Files\Wamp\www\webservice\index.php
  8. 打开您的浏览器并输入https:///webservice

订阅

对于需要订阅的 webservice,您可以在源代码注释中找到链接和更多信息。

Elmü

© . All rights reserved.