【问题标题】:PHP SoapClient unable to work with https WSPHP SoapClient 无法使用 https WS
【发布时间】:2010-09-16 11:36:10
【问题描述】:

我在使用包含 https 的 WS (WSDL) 的 PHP SoapClient 时遇到问题。 我的 PHP 版本是 5.2.5。 在你问之前,是的,我正在使用 PHP 的 Soap 和 openSSL 扩展。

我要访问的 URL 是: https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL

我正在使用的代码:

$url = "https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL";
$options["connection_timeout"] = 25;  
$options["location"] = $url;

$client = new SoapClient($url,$options);

在构建 SoapClient 时失败,我收到以下错误:

Warning: SoapClient::SoapClient(https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL): failed to open stream: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。在第 42 行的 C:\MY-DEV-FOLDER\index.php 中警告:SoapClient::SoapClient(): I/O 警告:无法在 C:\MY-DEV-FOLDER\ 中加载外部实体“https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL”第 42 行的 index.php 抛出异常 - SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL'

谁能告诉我是什么问题?

谢谢

埃雷兹

【问题讨论】:

    标签: php wsdl soap-client


    【解决方案1】:

    您需要在 PHP 中启用 OpenSSL 才能通过 https 检索内容。

    在 php.ini 中取消注释这一行

    extension=php_openssl.dll
    

    在 phpinfo() 中查找 openssl 部分:

    OpenSSL support => enabled  
    OpenSSL Library Version => OpenSSL 0.9.8k 25 Mar 2009
    OpenSSL Header Version => OpenSSL 0.9.8k 25 Mar 2009
    

    【讨论】:

      【解决方案2】:

      我刚刚运行了您提供的代码,它运行良好:

      <?php
      $url = "https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL";
      $options["connection_timeout"] = 25;
      $options["location"] = $url;
      $options['trace'] = 1;
      
      $client = new SoapClient($url,$options);
      
      print_r($client->__getFunctions());
      

      结果

      Array
      (
          [0] => ID3CheckInitialise_1bResponse ID3CheckInitialise_1b(ID3CheckInitialise_1b $parameters)
          [1] => ID3AddressLookupInitialise_1bResponse ID3AddressLookupInitialise_1b(ID3AddressLookupInitialise_1b $parameters)
          [2] => ID3Check_1bResponse ID3Check_1b(ID3Check_1b $parameters)
          [3] => AddressLookup_1bResponse AddressLookup_1b(AddressLookup_1b $parameters)
      )
      

      所以也许你应该检查是否有任何网络问题:是否有防火墙阻止了服务器进程内的通信? (我假设它是 IIS?)您可能还想检查 safe_mode 设置,尽管我怀疑这是这里的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-24
        • 2015-07-25
        • 2011-02-24
        • 2014-10-14
        • 2015-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多