PHP Web服务客户端与服务器示例

本文旨在为初学者提供一个简单的入门指南,介绍如何使用PHP 5编写Web服务客户端和服务器。示例代码简单易懂,适用于Windows和Linux平台。将通过几个不同的示例,展示如何发送GET和POST请求,使用URL和SOAP,以及如何解析XML响应和使用XPath。

Web服务客户端示例

以下是一些Web服务客户端的示例,它们展示了如何与不同的Web服务进行交互。

这个示例展示了如何向Yahoo Maps Web服务发送一个地址,并获取该地址的GPS坐标(经度和纬度)。这个Web服务通过URL的GET方式接收参数。客户端示例展示了如何使用XPath从返回的XML数据中提取数据。

Server: http://local.yahooapis.com/MapsService/V1/geocode Request: Street=701 First Ave, City=New York, State=NY Response: --- RESULT 1 --- Precision: address Address: 701 1st Ave ZIP: 11232 Latitude: 40.656335 Longitude: -74.012770

这个示例展示了如何获取世界上任何一个城市的当前天气数据。每个城市通过一个城市代码来表示(例如,NLXX0002代表荷兰阿姆斯特丹)。可以选择以摄氏度、公里、公里/小时和毫巴或华氏度、英里、英里/小时、英寸来查看结果。此外,还可以获得未来10天内每小时或每天的天气预报,但为了保持示例的简单性,这部分内容并未包含在内。这个Web服务通过URL的GET方式接收参数。客户端示例展示了如何使用XPath从返回的XML数据中提取数据。

Server: http://xml.weather.com/weather/local Request: City=NLXX0002, Count of forecast days=0, Units=European Response: Location: Amsterdam, Netherlands Local Time: 5:53 PM Sunrise: 6:40 AM Sunset: 8:44 PM Longitude: 4.90 Latitude: 52.35 Sky: Partly Cloudy Temperature: 18°C Feels Like: 18°C Dew Point: 13°C Pressure: 1010.8 mb Humidity: 73% Visibility: 10.0 km Wind Speed: 21 km/h Wind Direction: WSW UV Index: 2 Moon: Waxing Crescent WeatherStation: Amsterdam, NETHERLANDS

这个Web服务连接到Amazon的数据库Web服务。在继续阅读之前,请暂时忘记所知道的关于Amazon的一切!这个Web服务与在Amazon上购买的书籍、CD或DVD等产品没有任何关系。Amazon提供了一个Web服务,允许将任何类型的数据存储在他们的Web数据库服务器上,可以在那里创建自己的私有数据库(域)。这样,就可以编写(Web)应用程序,将数据存储在Amazon数据库中。这个服务的优势在于可以从世界各地访问这个数据库,可以存储大量数据(如视频文件),而且Amazon提供的服务器速度非常快,直接连接到互联网骨干网。显然,这项服务不是免费的。

在源代码中,可以找到订阅的URL以及获取需要的私钥和公钥的地方。但是,如果没有用有效的付款信息(例如,MasterCard)订阅,即使有有效的密钥,仍然会得到一个错误,尽管第一个月的1GB流量是免费的。

这个示例很有趣,因为它展示了如何验证一个客户端。为了避免其他人使用正在支付的账户,所有发送到服务器的请求必须包含公钥,用以识别自己,然后所有数据字段必须用私钥签名。签名是通过PHP命令hash_hmac()完成的。

Server: https://sdb.amazonaws.com Request: Action=CreateDomain AWSAccessKeyId=AIWMFIAEQGPKI3LFRADW DomainName=TestDomain SignatureMethod=HmacSHA256 SignatureVersion=1 Timestamp=2009-08-25T15:57:40.000Z Version=2009-04-15 Signature=Xp3QbA4G4Ws41aZ7LX80i8Z4WRqL6LmsIKX9P8DLluY=

这个示例是客户端和服务器的一对。它展示了编写一个Web服务服务器是多么简单。服务器和客户端都在localhost上运行。它所做的非常简单:客户端发送一个数学运算(如加法或乘法)和两个数字。服务器计算结果并以XML格式返回。数据通过POST发送。

Request: Operation=Multiply Value1=21 Value2=3 Response: Result=63

这个示例与前一个类似,只是它使用SOAP。客户端发送一个字符串,服务器执行一个操作,如反转它,或将其转换为大写。服务器和客户端都在localhost上运行。对于许多SOAP服务器来说,设置HTTP头字段"SOAPAction"很重要。发送的XML文档可能也包含一个XML字段"SOAPAction",但服务器还要求设置一个HTTP头,这看起来不太合逻辑。但是,根据服务器的不同,如果这个HTTP头不存在,可能会遇到错误。

Request: 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 This is a little Text Response: txeT elttil a si sihT

Sabre是一个为旅游业提供航班和酒店数据的Web服务。可以通过这个Web服务预订航班、酒店和租车。Sabre是开放旅游联盟(OTA)的成员。显然,必须订阅并为此服务付费。开发人员文档仅对付费客户开放。

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

Server: https://webservices.sabre.com/websvc

在Windows上运行示例

首先检查电脑上是否有程序在端口80上运行服务器。如果安装了Skype,请确保在菜单Tools -> Options -> Connection中,复选框"Use Port 80 and 443 as alternatives for incoming connections"未被选中!

其次检查浏览器是否配置了HTTP代理服务器。如果是,请关闭它!

安装Wamp Server,它包括Apache、mySql和PHP,安装在C:\Program Files\Wamp中。打开文件C:\Program Files\Wamp\bin\apache\Apachex.y.z\bin\php.ini,去掉行;extension=php_openssl.dll前的分号。

之后,从开始菜单启动服务器。会在图标托盘中找到一个新符号,可以左键点击它打开配置菜单。但是没有什么需要配置的:Wamp开箱即用。

将CodeProject中的ZIP文件的全部内容复制到文件夹C:\Program Files\Wamp\www\webservice中。如果做得正确,这个文件将会存在:C:\Program Files\Wamp\www\webservice\index.php

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485