【问题标题】:Error WSDL: SOAP-ERROR: Parsing WSDL: Couldn't load from错误 WSDL:SOAP-ERROR:解析 WSDL:无法从
【发布时间】:2013-04-04 10:20:42
【问题描述】:

我的问题很常见。我阅读了关于这个问题的几乎所有关于 stackoverflow 的主题,但仍然无法完成工作。我的代码是:

ini_set("soap.wsdl_cache", "0");
ini_set("soap.wsdl_cache_enabled", "0");
$proxy = new SoapClient('http://Myhostname/api/soap?wsdl');

我有这个错误:

Error WSDL: SOAP-ERROR: Parsing WSDL: Couldn't load from 
'http://Myhostname/api/soap?wsdl' : failed to load external entity 
"http://Myhostname/api/soap?wsdl"

在浏览器中的 URL

http://Myhostname/api/soap?wsdl

效果很好(返回 xml 响应)

我试试这段代码,看看 PHP 是否可以到达这个 URL:

if (file_get_contents('http://Myhostname/api/soap?wsdl') === false) {
    echo "ERROR: file_get_contents <br/>";
}

它显示我的错误“错误:file_get_contents”,所以它不起作用。在论坛上,我看到要解决这个问题,我必须将主机名添加到操作系统“主机”文件中。所以我做到了。在我的主机文件中,我添加了这一行 127.0.0.1 我的主机名

但它仍然不起作用。然后我将代码中的 URL 更改为

http://localhost/Myhostname/api/soap?wsdl

但它也不起作用。

我尝试了另一种在互联网上找到的解决方案。对某些人来说,它起作用了。在我的网址中,我更改了“?”字符为 '.'。所以我的新网址变成了

http://localhost/Myhostname/api/soap.wsdl

但它也不起作用。

我看到official SOAP doc!并尝试以不同的方式创建 SoapClient 对象(使用“proxy_host”和“proxy_port”等选项)。但这对我没有帮助。

这是我尝试解决这个问题的第二天,但我做不到。我正在实习,我没有很多经验,所以也许我没有尝试我找到正确的解决方案。也许有人可以帮忙。我会很高兴的。

【问题讨论】:

  • 我认为在某些情况下,您不能 file_get_contents() 到您的主机名来自该主机名后面的服务器本身。您是否尝试过从本地环境运行此代码?
  • 你试过http://127.0.0.1/Myhostname/api/soap?wsdl吗?
  • 其实是某种服务器配置问题。我的主管修好了。无论如何,谢谢你们。
  • 主管有没有告诉你配置问题是什么?对于所有寻找它的人来说可能会派上用场;)
  • 我试图解决同样的问题一整天,但仍然无法解决。你能分享一下配置问题是什么吗?

标签: magento soap


【解决方案1】:

检查的几个步骤

对我的主机名进行 ping 操作。它会给IP。改用ip看看

检查服务是否启用 S0AP, php_openssl, openssl, curl

希望你能得到它:)

【讨论】:

    【解决方案2】:

    我有类似的问题,我从 .htaccess 文件中取消注释 -MultiViews 解决它,然后从本地网站的 Apache 配置中解决。

    我的工作 Apache 配置是:

    <Directory /var/www/>
            Options Indexes FollowSymLinks -MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
    

    你也可以试试 url:

    http://localhost/Myhostname/api.php?type=soap&wsdl
    

    如果您使用社区版。

    【讨论】:

      【解决方案3】:

      而不是 $proxy = new SoapClient('http://Myhostname/api/soap?wsdl');
      试试 $proxy = new SoapClient(WSDLFILENAME);
      其中 WSDLFILENAME 是 WSDL 文件的操作系统名称。 这样做的另一个好处是减少了一次客户端-服务器往返。

      【讨论】:

        【解决方案4】:

        我在本地主机上尝试了SOAP Web Services,它工作正常。 Magento 无法响应请求的原因是它无法验证站点上启用的SSL Certificates

        我解决它的方法是允许自签名SSL verification

        $opts = [
            'http' =>
             [
                 'header' => "Authorization: Bearer ".$token
                ],
        'ssl' => [
            'allow_self_signed' => true , 
            'verify_peer' => false, 
            'verify_peer_name' => false]
        ];
        $context = stream_context_create($opts);
        

        我希望它有所帮助。 ;)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-04
          • 1970-01-01
          相关资源
          最近更新 更多