PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[转]php soap操作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

原文: https://www.jianshu.com/p/16b039956cf9

 

[转]php soap操作

 

 下面,在windows宿主机上面(192.168.123.149上面,访问其webroot目录下面的client2.PHP

<?PHP

try {
    $client = new SOAPClient(null, [
        'LOCATIOn' => 'http://192.168.123.41:888/server2.PHP',
        'uri' => 'http://192.168.123.41:888/server2.PHP',
    ]);

    // 直接调用
    echo $client->strtolink('192.168.123.41:888') . '<br>';
    // 间接调用
    // echo $client->__soapCall('strtolink', ['192.168.123.41:888']);

} catch (SOAPFault $E) {
    echo $e->getmessage();
}

  

[转]php soap操作

 

 

[转]php soap操作

 

 tcpdump到192.168.123.41上面抓包

 tcpdump tcp port 888 -w soap.pcap

文件soap.pcap

--------------------------------------------------------------------------------------------------------------------

 

SOAP 简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:

  • SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁-
    应当接受并处理它以及如何处理它们的框架;
  • SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例;
  • SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;
  • SOAP绑定(binding),使用底层协议交换信息。
  • 可扩展的。SOAP 无需中断已有的应用程序, SOAP 客户端、 服务器和协议自身都能发展。而且SOAP 能极好地支持中间介质和层次化的体系结构。
  • 简单的。客户端发送一个请求,调用相应的对象, 然后服务器返回结果。这些消息是XML 格式的,并且封装成符合http 协议的消息。因此,它符合任何路由器、 防火墙或代理服务器的要求。
  • 完全和厂商无关。SOAP可以相对于平台、 操作系统、 目标模型和编程语言独立实现。另外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。
  • 与编程语言无关。SOAP 可以使用任何语言来完成,只要客户端发送正确SOAP 请求( 也就是说, 传递一个合适的参数给一个实际的远端服务器)。SOAP 没有对象模型,应用程序可以捆绑在任何对象模型中。
  • 与平台无关。SOAP 可以在任何操作系统中无需改动正常运行。
  • NO-WSDL模式:使用参数来传递要使用的信息

  • WSDL模式: 使用WSDL文件名作为参数,并从WSDL中提取服务所需的信息。(WSDL文件结构在系统迭代频繁的时候,没有NO-WSDL模式灵活,这里暂时不讲.)

SOAP中主要用到三个类,SOAPServer,SOAPClient,SOAPFault.

server.PHP

<?PHP

class soapHandle
{

    public function strtolink($url = '') {
        return sprintf('<a href="%s">%s</a>', $url, $url);
    }
}

try {
    $server = new SOAPServer(null, ['uri' => 'http://127.0.0.1:8002/demo/soap/NO-WSDL/server.PHP']);
    $server->setClass('soapHandle');
    $server->handle();
} catch (SOAPFault $f) {
    echo $f->getmessage();
}

client.PHP

<?PHP

try {
    $client = new SOAPClient(null, [
        'LOCATIOn' => 'http://127.0.0.1:8002/demo/soap/NO-WSDL/server.PHP',
        'uri'      => 'http://127.0.0.1:8002/demo/soap/NO-WSDL/server.PHP',
    ]);

    // 直接调用
    echo $client->strtolink('www.demo.com') . '<br>';
    // 间接调用
    echo $client->__soapCall('strtolink', ['www.demo.com']);

} catch (SOAPFault $E) {
    echo $e->getmessage();
}

server.PHP


<?PHP

class SOAPHandle
{

    public function auth($auth) {
        if ($auth->String[0] != 'demo' || $auth->String[1] != '123456') {
            throw new SOAPFault('Server', 'No Permission');
        }
    }

    public function strtolink($str = '', $name = '', $openwin = 0) {
        $name = $name == '' ? $str : $name;
        $openwin_tag = $openwin == 1 ? ' target="_blank" ' : '';

        return sprintf('<a href="%s" %s>%s</a>', $str, $openwin_tag, $Name);
    }

}

$config = array(
    'uri' => 'http://127.0.0.1:8002/demo/soap/NO-WSDL-Header/server.PHP'
);

$objHandle = new SOAPHandle;

// no wsdl mode
try {

    $server = new SOAPServer(null, $config);
    $server->setObject($objHandle );
    $server->handle();

} catch (SOAPFault $f) {

    echo $f->faultString;

}

client.PHP

<?PHP

$config = [
    'LOCATIOn' => 'http://127.0.0.1:8002/demo/soap/NO-WSDL-Header/server.PHP',
    'uri'      => 'http://127.0.0.1:8002/demo/soap/NO-WSDL-Header/server.PHP',
    'trace'    => true
];

try {

    $auth = [
        'demo',
        '123456'
    ];

    // no wsdl
    $client = new SOAPClient(null, $config);

    /*
     * SoapHeader参数说明如下所示:
     * 'http://tempuri.org/'   namespace(命名空间可省略)
     * 'MySoapHeader'          SoapHeader头的类名
     * 'array(...)'            存放标识身份的字符串参数
     * 'true'                  是否必须处理该header
    */
    $header = new SOAPHeader('http://127.0.0.1:8002/demo/soap/NO-WSDL-Header/server.PHP', 'auth', $auth, false, SOAP_ACTOR_NEXT);
    $client->__setSoapHeaders([$header]);

    $strtolink = $client->__soapCall('strtolink', [
        'http://www.demo.com',
        '测试网址',
        1
    ]);
    echo $strtolink . '<br>';

} catch (SOAPFault $E) {
    echo $e->getmessage();
}


浅谈 SOAP



作者:谁不曾年少轻狂过
链接https://www.jianshu.com/p/16b039956cf9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

大佬总结

以上是大佬教程为你收集整理的[转]php soap操作全部内容,希望文章能够帮你解决[转]php soap操作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: