【问题标题】:How do I access Web Service via SOAP in PHP?如何在 PHP 中通过 SOAP 访问 Web 服务?
【发布时间】:2014-11-24 09:44:42
【问题描述】:

我试过这样的:

  try{

    $opts = array(
        'http'=>array(
            'user_agent' => 'PHPSoapClient'
            )
        );

    $context = stream_context_create($opts);
    $client = new SoapClient('http://83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem?wsdl',
                             array('stream_context' => $context,
                                   'cache_wsdl' => WSDL_CACHE_NONE));

                             ));
    print_r($client);
}
catch(Exception $e){
    echo $e->getMessage();
}

我的 var_dump 函数的结果是: SOAP-ERROR: Parsing WSDL: Couldn't load from .... failed to load external entity...

如何通过soap访问网络服务?谢谢。

这是xml的开头:

【问题讨论】:

  • 有人吗?欢迎任何想法:)
  • 我认为您不需要用户代理和上下文。看起来您无法读取 WSDL,因为它受到基本身份验证的保护。请参阅我的答案的第二部分以获取解决方案
  • 我从另一个帖子中看到我必须从 php.ini 启用 extension=php_openssl.dll。我不得不提到它是从一开始就启用的

标签: php web-services soap


【解决方案1】:

我刚刚从 83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem?wsdl 下载了文件。我将它保存为 wsdl 格式,现在我得到了函数

$client = new SoapClient("WebItem.wsdl", array('proxy_host'     => "83.166.204.26",
                                            'proxy_port'     => 7147,
                                            'proxy_login'    => "xxxxxx",
                                            'proxy_password' => "xxxxxxxx"));
echo "<pre>"; var_dump($client->__getFunctions()); echo "</pre>";

【讨论】:

    【解决方案2】:

    首先: 您提供的 URL 所需的基本身份验证。当使用 HTTP 基本身份验证时,PHP 只会在调用服务时发送凭据,而不是在获取 WSDL 时发送。

    You CAN get a wsdl, if basic authentication is required:

    $login = 'xxx'; 
    $password = 'xxx';
    
    $client = new SoapClient(
         'http://' . urlencode($login) . ':' . urlencode($password) . '@83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem?wsdl',
         array(
             'login' => $login,
             'password' => $password
         ) 
    );
    

    其次: 您的返回 XML 看起来不像有效的 WSDL 文件。阅读SoapClient documentation page 以正确使用 - new SoapClient() 的第一个参数必须是 WSDL 文件的 URI 或 null 用于非 WSDL 使用。 (这里是example of WSDL file )可能你需要在非WSDL模式下创建SoapClient?

    【讨论】:

    • 我更新了我的帖子。我认为这是链接:83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/…。这将返回有效的 WSDL
    • 请再次查看我的帖子
    • 我完全使用了您的代码,我只是更改了密码和登录名,但我仍然收到此消息“致命错误:未捕获的 SoapFault 异常:[WSDL] SOAP-ERROR: Parsing WSDL:”。谢谢你帮助我,我真的很感激它
    • 在浏览器中完美运行,查看我的帖子,看看我得到了什么
    • 它必须是别的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多