NuSOAP 웹 서비스 인터페이스
8062 단어 PHPwebserviceSOAP
1. 우선 http://sourceforge.net/projects/nusoap/ 에 가서 nusoap. zip 를 다운로드 합 니 다. 2. 서버: nusoap Service. php 파일 을 만 듭 니 다.
<?php
require_once ("lib/nusoap.php");
$server = new soap_server ();
//
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
$server->xml_encoding = 'UTF-8';
$server->configureWSDL ('test'); // wsdl
/*
: bool->"xsd:boolean" string->"xsd:string"
int->"xsd:int" float->"xsd:float"
*/
$server->register ( 'GetTestStr', //
array ("name" => "xsd:string" ), // , "xsd:string"
array ("return" => "xsd:string" ) ); // , "xsd:string"
//isset
$HTTP_RAW_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_POST_DATA : '';
//service
$server->service ( $HTTP_RAW_POST_DATA );
/**
*
* @param $name
*/
function GetTestStr($name) {
return "Hello, { $name } !";
}
?>
3. 클 라 이언 트: nusoapClient. php 파일 을 만 듭 니 다.
<?php
require_once ("lib/nusoap.php");
/*
WSDL WebService
1 WSDL ( wsdl )
2 WSDL
$client = new soapclient('http://localhost/nusoapService.php?wsdl',true);
*/
$client = new soapclient ( 'http://localhost/nusoapService.php' );
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'UTF-8';
//
$paras = array ('name' => 'Bruce Lee' );
// ,
$result = $client->call ( 'GetTestStr', $paras );
// ,
if (! $err = $client->getError ()) {
echo " : ", $result;
} else {
echo " : ", $err;
}
?>
주: 결과 반환: Hello, {Bruce Lee}!
NuSOAP 를 통 해 WSDL 을 사용 하여 다음 과 같은 몇 가지 장점 을 제공 합 니 다. 모든 서비스 메타 파일, 예 를 들 어 네 임 스페이스 (namespaces), endpoint URL, 매개 변수 이름 (parameter names)등 은 WSDL 파일 에서 직접 얻 을 수 있 습 니 다. 그러면 클 라 이언 트 가 서버 의 변화 에 동적 으로 적응 할 수 있 습 니 다. 서버 에서 언제든지 얻 을 수 있 기 때문에 이 데 이 터 는 사용자 스 크 립 트 에서 하 드 인 코딩 을 사용 하지 않 아 도 됩 니 다. soap proxy 클래스 를 사용 할 수 있 습 니 다. 이러한 종 류 는 soapclient 클래스 에서 파생 되 어 WDSL 파일 에 자세 한 동작 에 대응 하 는 방법 을 추가 합 니 다.. 현재 사용 자 는 이 방법 을 통 해 직접 호출 할 수 있 습 니 다. soapclient 클래스 는 getProxy () 를 포함 합 니 다.방법 은 soap proxy 클래스 의 대상 을 되 돌려 줍 니 다. soap proxy 클래스 는 soapclient 클래스 에서 파생 되 어 WSDL 문서 에서 정의 하 는 동작 방법 을 추가 하고 endpoint 의 원 격 방법 을 사용 할 수 있 도록 합 니 다. 이것 은 soapclient 대상 이 WDSL 파일 로 초기 화 하 는 경우 에 만 적 용 됩 니 다. 사용자 가 사용 하기 쉽 고 성능 이 단점 입 니 다. PHP 에서 대상 을 만 드 는 것 은 소모 입 니 다.시의 -- 공리 적 목적 을 위 한 서비스 (and this functional serves no utilitarian purpose) 가 아 닙 니 다.
<?php
require_once ("lib/nusoap.php");
$client = new soapclient ( 'http://localhost/nusoapService.php?wsdl',true);
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'UTF-8';
// proxy
$proxy = $client->getProxy();
//
$sq = $proxy->GetTestStr('Bruce Lee');
if (!$err=$proxy->getError()) {
print_r($sq);
} else {
print "ERROR: $err";
}
print 'REQUEST:<xmp>'.$p->request.'</xmp>';
print 'RESPONSE:<xmp>'.str_replace('><', ">
<", $p->response).'</xmp>';
?>
네 번 째 단계: server 엔 드 파일 페이지 실행:http://localhost/nusoapService . php 에서 생 성 된 wdl 파일
방법 이름 을 누 르 십시오. 이렇게 해서 우 리 는 service 에 몇 줄 의 코드 를 추가 하면 NuSOAP 를 사용 하여 service 에 시각 화 된 문 서 를 제공 합 니 다. 그러나 이것 은 우리 가 할 수 있 는 모든 것 이 아 닙 니 다.
서비스 에 서 는 NuSOAP 를 사용 하여 WSDL 호출 을 추가 합 니 다. 서비스 에 WSDL 을 생 성 할 수 있 고 다른 문서 도 생 성 할 수 있 습 니 다. 이와 달리 클 라 이언 트 에 서 는 우리 가 할 수 있 는 일이 적 습 니 다. 적어도 이 간단 한 예 에 서 는 이 클 라 이언 트 가 WSDL 을 사용 하지 않 은 클 라 이언 트 와 다 를 것 이 없습니다. 유일한 차이 점 은 풀이 입 니 다.soapclent class 를 분석 하 는 것 은 이전에 service endpoint 를 통 해 이 루어 진 것 이 아니 라 WSDL 의 URL 을 제공 함으로써 이 루어 진 것 입 니 다.
NuSoap 에서 WebService 를 호출 하여 난동 을 일 으 키 는 해결 방법:
$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'utf-8';
파일 코드 에 출력 이 있 으 면 안 됩 니 다. 그렇지 않 으 면 호출 할 때 다음 과 같은 오류 가 발생 합 니 다. XML error parsing SOAP payload on line x (줄 번호): 예 약 된 XML 이름
nusoap 으로 웹 서 비 스 를 실현 합 니 다. phop 의 SOAP 확장 을 열지 마 십시오. nusoap 의 SoapClient 류 와 phop 5 내 장 된 SOAP 류 가 충돌 하기 때 문 입 니 다.
해결 방안
1. php. ini 를 수정 하여 php 5 에 내 장 된 soap 확장 을 불 러 오지 않 습 니 다 (windows 아래 pp. soap. dll).
2. nusoap 의 SoapClient 클래스 의 이름 을 바 꾸 는 것 도 있 습 니 다.
인증
<?php
header('content-type: text/xml; charset=UTF-8');
require_once('nusoap.php');
$params = array('AuthenticationHeader' => array(
'Content-Type' => 'text/xml; charset=UTF-8',
'SOAPAction' => 'YourFunstion',
)
);
$client = new nusoap_client('http://www.yourdomain.com/service.asmx?wsdl', true, '', '', '', '');
$client->setHeaders('
<tns:AuthenticationHeader xmlns:tns="http://tempuri.org/webservice">
<tns:UserName>username</tns:UserName>
<tns:Password>password</tns:Password>
</tns:AuthenticationHeader>
');
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$result = $client->call('YourFunction', $params, '', '', false, true);
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
$err = $client->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
echo '<h2>Result</h2><pre>';
//print_r($result);
echo '</pre>';
}
}
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
?>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.