【问题标题】:Bind SoapClient request to a specific IP将 SoapClient 请求绑定到特定 IP
【发布时间】:2011-04-15 06:41:55
【问题描述】:

我需要实现一个网络服务,其中SoapServer 要求我使用SoapClient 机器上的特定IP 发送数据,该机器有一堆不同的IP。问题是,如何强制 PHP 使用这个特定的 IP 发送该请求?

关于 SOAP 的 PHP 文档真的很差。

谢谢。


通过 halfdan 的回答,我能够解决这个问题,所以我发布了一个关于结果如何的 sn-p:

protected function load_ws() {
    if ($this->ws == null) { // load webservice

        ini_set("soap.wsdl_cache_enabled", 0);
        ini_set("allow_url_fopen", 1);

        try {
            if ($this->context == null) // load stream context socket
                $this->context = stream_context_create(array(
                    "socket" => array(
                        "bindto" => te_auth_ip.":0"
                    )
                ));

            $this->ws = new SoapClient($this->wsdl_path, array(
                "soap_version" => SOAP_1_1,
                "style" => SOAP_RPC,
                "use" => SOAP_ENCODED,
                "authentication" => SOAP_AUTHENTICATION_BASIC,

                "login" => te_login,
                "password" => te_pass,

                "encoding" => "UTF-8",
                "trace" => true,
                "exceptions" => true,
                "compression" => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
                "connection_timeout" => te_timeout,
                "stream_context" => $this->context
            ));

        } catch (SoapFault $fault) {
            $this->error($fault, "LOAD");
        }

    }
}

【问题讨论】:

    标签: php soap soap-client


    【解决方案1】:

    这应该可以工作(见#60004):

    $options = array('socket' => array('bindto' => 'www.xxx.yyy.zzz:port'));
    $context = stream_context_create($options);
    $soap = new SoapClient($wsdl, array('location'=>'http://...','uri' => '...','stream_context' => $context));
    

    我同意文档应包含此选项。

    【讨论】:

    • 感谢您的建议,但是我收到错误消息,我现在打电话时收到:SOAP-ENV:Client: Operation '' is not defined in the WSDL for this service
    • $wsdl 需要成为您的 WSDL。它只是放在这个示例脚本中,因为它需要在实例化时提供给 SoapClient。
    • 是的,我已经按照你说的那样实现了,问题是如果我分配一个端口它会给出错误,如果我只是填写它的工作 IP,显然必须在原始端口定义一个端口wsdl.
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2012-09-17
    • 1970-01-01
    • 2013-02-05
    • 2012-04-16
    • 2017-03-11
    • 2012-05-23
    • 2012-05-26
    相关资源
    最近更新 更多