【问题标题】:PHP WSDL SOAP Can't Import SchemaPHP WSDL SOAP 无法导入架构
【发布时间】:2012-08-03 15:29:23
【问题描述】:

我正在尝试使用外部 Web 服务,但收到错误 Parsing Schema: can't import schema from webservice_url。该服务使用 HTTP Basic 身份验证并使用 SSL。我可以通过网络浏览器登录并查看它生成的 xml,但我无法更改生成的内容,因为它不是我生成 xml 的代码。我有以下代码。

$config = array('login' => $user_id, 'password' => $password);
$client = new SoapClient($url, $config);

【问题讨论】:

  • 您确定该 URL 正在生成 XML?
  • 您可以发布您通过浏览器看到的 XML 吗? $url 的值是多少?
  • 你能在本地保存 WSDL 并在没有用户/密码的情况下将 PHP 指向它吗?
  • 就像将 xml 文件保存在本地并从本地服务器上的某个脚本中输出一样?

标签: php soap soap-client


【解决方案1】:

好吧,在网上研究和阅读了一堆文章之后,这似乎是 php-soap 的一个限制,一些建议指向使用 curl 来完成。实际上,我决定完全避免使用 PHP,因为我刚刚学习了 Ruby,并且一直在远离 PHP。我通过使用 Savon gem 完成了我的上述任务,它有一些关于身份验证和设置 cookie 的非常好的文档。使用这个 gem 效果很好。

【讨论】:

    【解决方案2】:

    我在 SoapClient 手册页的 comment section 上找到了这个:

    <?php 
    
    $login = 'someone';
    $password = 'secret';
    
    $client = new SoapClient(
        'https://' . urlencode($login) . ':' . urlencode($password) . '@www.server.com/path/to/wsdl',
        array(
            'login' => $login,
            'password' => $password
        )
    );
    
    ?>
    

    似乎基本身份验证用于端点调用,而不是 WSDL 检索。

    【讨论】:

    • 嗯。我试过了。将它指向 WSDL 会给出与我的问题相同的错误并将其指向架构会给出SOAP-ERROR: Parsing WSDL: Couldn't find &lt;definitions&gt;
    • 糟糕!开头有http:// 而不是https://。编辑答案以修复。你试过后改了吗?
    • 是的,我做到了。我还将端口也放在地址后面。我尝试将proxy_host 设置为架构网址,但请求全部返回NULL
    • 确保在您的 phpinfo() 中启用 OpenSSL 支持?
    • 表示已启用,版本为 OpenSSL 1.0.0-fips 2010 年 3 月 29 日
    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    相关资源
    最近更新 更多