亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

NuSOAP教程

2019-11-17 04:26:22
字體:
來源:轉載
供稿:網友

這個文檔描述了如何取得和安裝 NuSOAP,然后提供一些實例來說明 NuSOAP 的功能,這并不是一個全面的 NuSOAP 的介紹,但是希望能夠然一些 php 開發者可以有一個很好的入門。

NuSOAP 是一組 PHP 類,它讓開發者可以創建和使用 SOAP web services。它不需要安裝任何的 PHP 擴展。它是在2004年12月3日被開發,當前的版本是 NuSOAP(0.6.7) 。支持 SOAP 1.1 規范,它能夠生產 WSDL 1.1 ,當然也可以使用它,同時也支持 rpc/encoded and document/literal service。但是,必須注意 NuSOAP 沒有像 .NET 和 Apache Axis 那樣提供完全的實現。

Hello, World
我會以 "Hello, World" 為實例做開始,編寫基本的 NuSOAP 客戶端和服務器端的代碼。

我們先從服務器端開始,應為沒有服務器端,有客戶端也是沒有意義的。我們將編寫一個帶有單個參數并返回一個字符串,名叫 Hello 的 SOAP 方法,希望代碼中的注釋能夠提供有效的說明。

<?php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the server instance
$server = new soap_server;
// Register the method to expose
$server->register('hello');
// Define the method as a PHP function
function hello($name) {
    return 'Hello, ' . $name;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

以下是客戶端的代碼,有一些重要的事情需要注意:首先,當創建實例 soapclient 時,需要指定一個 service 的 URL 為參數,在這個實例中,helloworld.php 從 http://localhost/phphack 訪問的。當然,你要使用的 services 放在不同的 URL;第二,當調用service 時,第一個參數是 service 的名字,必須要匹配有效的方法名(有的服務器是大小寫敏感的)。在這個實例,他必須匹配在 helloworld.php 中已經注冊了的方法。最后,第二個參數是一個數組,它將是傳遞給 SOAP service 方法作為參數。既然 helloworld.php 中的方法 hello 只有一個參數,那么數組就只有一個元素。

<?php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the client instance
$client = new soapclient('http://localhost/phphack/helloworld.php');
// Call the SOAP method
$result = $client->call('hello', array('name' => 'Scott'));
// Display the result
PRint_r($result);
?>

Debugging
編程時,當有問題出現的時候你都需要調試。NuSOAP 提供了一組工具來幫助你做這個工作。NuSOAP 調試的時候需要查看的信息是發送的請求信息和返回的相應信息。NuSOAP 的客戶端類允許你通過它的兩個成員來查看這些信息。例如,這里是顯示請求和響應的 helloworldclient.php 的修改版。在下一部分我會回顧顯示在客戶端代碼的請求和響應信息。

<?php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the client instance
$client = new soapclient('http://localhost/phphack/helloworld.php');
// Call the SOAP method
$result = $client->call('hello', array('name' => 'Scott'));
// Display the result
print_r($result);
// Display the request and response
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
?>

NuSOAP 也提供了一個方法使用它的類就可以通過日志來查看調試信息。加入以下的代碼將會顯示冗長的調試信息。不幸的是輸出的說明必須留給讀者。

// Display the debug messages
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';

服務器端能夠提供相似的調試信息,有趣的是,這些調試信息是在SOAP 的相應的末尾以 xml 格式顯示,因此它可以在客戶端中查看到。服務器端的調試看起來像這樣:

<?php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Enable debugging *before* creating server instance
$debug = 1;
// Create the server instance
$server = new soap_server;
// Register the method to expose
$server->register('hello');
// Define the method as a PHP function
function hello($name) {
    return 'Hello, ' . $name;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

調試的第三個方法不算是真正的調試,它是很好的編程實踐。上面的實例在調用 SOAP 的時候沒有做錯誤的檢查,更健壯的客戶端會像這樣:

<?php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the client instance
$client = new soapclient('http://localhost/phphack/helloworld.php');
// Check for an error
$err = $client->getError();
if ($err) {
    // Display the error
    echo '<p><b>Constructor error: ' . $err . '</b></p>';
    // At this point, you know the call that follows will fail
}
// Call the SOAP method
$result = $client->call('hello', array('name' => 'Scott'));
// Check for a fault
if ($client->fault) {
    echo '<p><b>Fault: ';
    print_r($result);
    echo '</b></p>';
} else {
    // Check for errors
    $err = $client->getError();
    if ($err) {
        // Display the error
        echo '<p><b>Error: ' . $err . '</b></p>';
    } else {
        // Display the result
        print_r($result);
    }
}
?>

為了測試代碼,需要引起錯誤發生,例如,改變調用的方法名稱 hello 為 goodbye。

Request and Response
我在上面的例子中已經展示了顯示 SOAP 的請求和響應信息是如此的容易,在這里 hello2client.php 的請求信息:

POST /phphack/helloworld2.php HTTP/1.0
Host: localhost
User-Agent: NuSOAP/0.6.8 (1.81)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 538

<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope
  SOAP-ENV:encodingStyle="  xmlns:SOAP-ENV="  xmlns:xsd="  xmlns:xsi="  xmlns:SOAP-ENC="  xmlns:si="<SOAP-ENV:Body>
  <ns1:hello xmlns:ns1="
   <name xsi:type="xsd:string">Scott</name>
  </ns1:hello>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在 HTTP headers 里,你會看到 SOAPAction 是一個空的字符串,這是它的默認值。你的 service 方法可以設置 SOAPAction 的值,你的客戶端代碼可以指定 SOAPAction 作為參數來調用方法。

在 XML payload,你可以看到 NuSOAP 使用和Latin-1一樣著名的 ISO-8859-1 做為編碼,為了指定不同的編碼,你可以在客戶端 soapclient 的實例設置 soap_defencoding 屬性。使用指定的編碼來編碼參數的數據當然就是程序員的責任。幸運地,在 SOAP 里PHP提供了很多函數來編碼和解碼最通用的編碼數據,如 UTF-8。


另一件事情要注意的是,元素指定要調用的方法,名稱為 hello 的元素被放在
http://tempuri.org的域名下,指定真實的域名是最佳的實踐,對于很多 services 也是很有必要的。這里展示了一個未來的文檔:

SOAP 服務的響應像以下:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Wed, 03 Nov 2004 21:32:34 GMT
X-Powered-By: asp.net
X-Powered-By: PHP/4.3.4
Server: NuSOAP Server v0.6.8
X-SOAP-Server: NuSOAP/0.6.8 (1.81)
Content-Type: text/xml; charset=ISO-8859-1
Content-Length: 556

<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope
  SOAP-ENV:encodingStyle="  xmlns:SOAP-ENV="  xmlns:xsd="  xmlns:xsi="  xmlns:SOAP-ENC="  xmlns:si="<SOAP-ENV:Body>
  <ns1:helloResponse xmlns:ns1="
   <return xsi:type="xsd:string">Hello, Scott</return>
  </helloResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线视频美女| 欧美一区二区三区精品电影| 奇米影视亚洲狠狠色| 5278欧美一区二区三区| 日韩精品视频在线播放| 韩国v欧美v日本v亚洲| 91成人国产在线观看| 午夜精品一区二区三区视频免费看| 日韩精品免费综合视频在线播放| 久久久精品久久久久| 午夜精品www| 久久777国产线看观看精品| 疯狂欧美牲乱大交777| 尤物99国产成人精品视频| 亚洲国产精品久久久久久| 久久免费国产视频| 国产精品免费久久久久久| 欧美亚洲一级片| 成人羞羞国产免费| 久久99精品久久久久久噜噜| 国产69久久精品成人| 欧美日韩黄色大片| 欧美老女人性生活| 欧美中文字幕视频在线观看| 亚洲最新在线视频| 国产视频精品久久久| 亚洲色图偷窥自拍| 欧美一级电影免费在线观看| 全色精品综合影院| 国产精品视频播放| 91成品人片a无限观看| 国产美女直播视频一区| 亚洲va欧美va国产综合剧情| 成人在线国产精品| 久久精品2019中文字幕| 欧美精品18videos性欧| 欧美一级在线亚洲天堂| 欧美极品第一页| 国产一区二区三区精品久久久| 色噜噜狠狠狠综合曰曰曰88av| 国产日韩欧美91| 国语对白做受69| 91九色综合久久| 91系列在线观看| 亚洲一区二区黄| 国产高清在线不卡| 日韩免费看的电影电视剧大全| 亚洲国产精品中文| 日韩av在线一区| 尤物tv国产一区| 久久91精品国产91久久久| 久久精品国产精品亚洲| 一个人看的www久久| 久久久噜噜噜久噜久久| 欧美成人国产va精品日本一级| 亚洲视频在线观看| 国产91在线视频| 北条麻妃一区二区三区中文字幕| 亚洲自拍av在线| 国产亚洲视频在线| 欧美黄色免费网站| 欧美日韩国产影院| 97精品国产97久久久久久春色| 性色av一区二区三区免费| 日韩欧美主播在线| 国产精品成人一区| 亚洲一区二区免费| 538国产精品一区二区免费视频| 亚洲国产精品久久精品怡红院| 91av视频在线播放| 久久免费福利视频| 国产精品91久久| 伊人久久久久久久久久久久久| 日韩在线中文视频| 欧美一区二区三区免费观看| 51ⅴ精品国产91久久久久久| 亚洲一区二区精品| 国产精品影片在线观看| 麻豆精品精华液| 国产精品一区二区三区久久| 怡红院精品视频| 亚洲欧美激情一区| 成人免费淫片aa视频免费| 欧美做爰性生交视频| 欧美激情aaaa| 亚洲国产私拍精品国模在线观看| 久久久久久久久国产| 中文字幕欧美在线| 日韩在线免费视频| 欧美电影免费观看电视剧大全| 精品五月天久久| 亚洲mm色国产网站| 最新91在线视频| 亚洲色图第三页| 中文字幕亚洲一区| 久久五月情影视| 日韩欧美一区视频| 亚洲综合在线做性| 亚洲一区二区三区成人在线视频精品| 色噜噜亚洲精品中文字幕| 国产精品福利网站| 国产婷婷色综合av蜜臀av| 国产成人av网址| 91精品啪在线观看麻豆免费| 精品爽片免费看久久| 亚洲综合成人婷婷小说| 亚洲第一精品久久忘忧草社区| 欧美一区在线直播| 国产大片精品免费永久看nba| 久久人体大胆视频| 欧美一级淫片播放口| 在线国产精品视频| 深夜福利国产精品| 97精品视频在线观看| 亚洲国产欧美自拍| 日韩精品视频免费专区在线播放| 国产精品你懂得| 一本色道久久综合亚洲精品小说| 欧美在线一级va免费观看| 欧美性猛交xxxx乱大交| 国产美女高潮久久白浆| 777国产偷窥盗摄精品视频| 亚洲精品乱码久久久久久金桔影视| 91免费人成网站在线观看18| 日韩精品福利在线| 成人黄色在线免费| 北条麻妃在线一区二区| 日韩最新av在线| 亚洲男人天堂网站| 亚洲人午夜色婷婷| 国产精品九九九| 亚洲天堂av电影| 色悠久久久久综合先锋影音下载| 久久精品亚洲精品| 26uuu久久噜噜噜噜| 欧美亚洲在线播放| 欧美一级免费看| 国产精品高清在线| 午夜精品久久久久久久久久久久| 国产黑人绿帽在线第一区| 中文字幕视频一区二区在线有码| 日韩欧美国产中文字幕| 久久精品国产v日韩v亚洲| 日本欧美爱爱爱| 92国产精品久久久久首页| 大荫蒂欧美视频另类xxxx| 全球成人中文在线| 在线性视频日韩欧美| 欧洲日本亚洲国产区| 亚洲欧美中文日韩在线| 精品中文字幕在线2019| 精品欧美一区二区三区| 亚洲福利在线视频| 日韩中文字幕久久| 国产精品影院在线观看| 亚洲欧美一区二区三区在线| 欧美日韩国产一区二区| 日韩免费精品视频| 久久久精品亚洲| 中文字幕精品一区久久久久| 国产精品大片wwwwww| 久久久久久亚洲精品中文字幕| 久久亚洲精品中文字幕冲田杏梨| 精品久久久视频|