이 글의 예시에서는 PHP에서 Soap 통신을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 구현 방법은 다음과 같습니다.
함수 HttpSoap($server, $port, $url, $namespace, $action, $data) {
$fp = @fsockopen($server, $port);
if (!$fp) {
거짓을 반환합니다.
} 그 밖의 {
$soapData = ConstructData($namespace, $action, $data);
$length = strlen($soapData);
$out = "POST $url HTTP/1.1rn";
$out .= "호스트: $serverrn";
$out .= "콘텐츠 유형: text/xml; charset=utf-8rn";
$out .= "콘텐츠 길이: $lengthrn";
$out .= "SOAPAction: "$namespace$action"rnrn";
$out .= $soapData;
$out .= "rnrn";
fputs($fp, $out);
stream_set_timeout($fp, 2);
$헤더 = "";
while($line = Trim(fgets($fp))) {
$header .= $line."n";
}
$dataPos = strpos($header, "콘텐츠 길이: ") 16;
$dataEnd = strpos($header, "n", $dataPos);
$dataLength = substr($header, $dataPos, $dataEnd - $dataPos);
$data = "";
if($dataLength > 0) {
$data = fread($fp, $dataLength);
}
fclose($fp);
if(strlen($data) != $dataLength || $dataLength <= 0) {
거짓을 반환합니다.
}
$data 반환;
}
}
함수 ConstructData($namespace, $action, $data) {
$soapData = "
rn";
$soapData .= "http://schemas.xmlsoap.org/soap/envelope/">rn";
$soapData .= " rn";
$soapData .= " <$action xmlns="$namespace">rn";
foreach($data as $name => $value) {
$name = iconv("GBK","UTF-8",$name);
$value= iconv("GBK","UTF-8",$value);
$soapData .= " <$name>$value$name>rn";
}
$soapData .= " $action>rn";
$soapData .= " rn";
$soapData .= "";
$soapData 반환;
}
$data=배열(
'user'=>'Test', //바이너리 데이터를 입력해야 하는 경우 BASE64 인코딩을 사용하세요
'통과'=>'테스트'
);
echo HttpSoap('sample.anyhost.com', 80, '/sampleSoap.asmx', 'http://tempuri.org/', 'logIn', $data);
?>
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.