【问题标题】:Uncaught SoapFault exception: [HTTP] Error Fetching http headers未捕获的 SoapFault 异常:[HTTP] 获取 http 标头时出错
【发布时间】:2010-10-29 13:41:42
【问题描述】:

我正在尝试创建与 Magento 的 Web 服务的soap 连接,但是当我尝试创建soap 客户端类的实例时出现错误。我可以毫无问题地在 Firefox 中查看 wsdl 文件,我可以看到 php 在 apaches 日志中发出对 wsdl 的请求,但它仍然失败。 Nusoap 可以连接。

$proxy = new SoapClient('someaddress?wsdl');

错误是

<b>Fatal error</b>:  Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php:29
Stack trace:
[internal function]: SoapClient-&gt;__doRequest('&lt;?xml version=&quot;...',    'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0)
[internal function]: SoapClient-&gt;__call('call', Array)
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient-&gt;call(NULL, 'catalog_categor...', 5, 'giftshop')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586): include('/home/sites/cor...')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(228): MY_Loader-&gt;_ci_load(Array, '')
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader-&gt;view('contentpage_tem...', false, true)
[internal function]: Contentpage-&gt;index()
/home/sites/xxx in <b>/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php</b> on line <b>29</b>

谢谢

【问题讨论】:

  • 我可能弄错了,但调用堆栈中的“gift_service.php(29): SoapClient->call(NULL, 'catalog_categor...'”行似乎并不对应到“$proxy = new SoapClient”,但类似于“proxy->catalog_categories()”?请(仔细)检查 gift_service.php 中的第 29 行

标签: php soap magento wsdl


【解决方案1】:

尝试设置:

default_socket_timeout = 120

在您的 php.ini 文件中。

【讨论】:

  • 这对我有帮助,以防与 Magento 完全无关。
  • 这也可以在运行时使用ini_set('default_socket_timeout', 120) 完成,如果您以后想恢复它,它将为您提供原始值。
【解决方案2】:

您是否尝试添加

'trace'=>1,

给SoapClient创建参数然后:

var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());

看看发生了什么?

【讨论】:

  • 这帮助我看到我的soap请求缺少正确的参数,但我不知道为什么我的wsdl文件没有正确更新。
【解决方案3】:

如果服务器端出现问题,客户端可能会出现此错误。例如,如果 SOAP 服务器是一个带有解析错误的 PHP 脚本,则客户端将失败并显示此消息。

如果您可以控制服务器,请在托管 SOAP 服务器的机器上跟踪您的 Apache error_log。在 CentOS 上,你会在 /var/log/httpd/error_log 中找到它,所以命令是:

tail -f /var/log/httpd/error_log

现在刷新客户端并观察错误消息。将显示服务器脚本的任何 PHP 错误。

希望对某人有所帮助。

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。
    我将它作为 CLI 运行。所以 PHP 一直在运行,它必须在一段时间后一次又一次地进行肥皂调用。
    我犯的错误是为此使用单例模式。我认为使用单例会导致性能提升,但反过来我得到了

    Error Fetching http headers in ...
    

    我通过为每个调用创建新的 saop 对象来修复它。

    【讨论】:

      【解决方案5】:

      我不是关于你的 PHP 配置,但在 PHP 5.2.6 之前,PHP 的 SOAP 客户端确实存在一些问题:

      Bug #41983 - Error Fetching http headers

      【讨论】:

        【解决方案6】:

        如果这是与 Magento 相关的问题,您应该关闭自动重新索引,因为这可能会导致套接字超时(或过期)。脚本完成其任务后,您可以重新打开它。在 php.ini 中增加默认套接字超时也是一个好主意。

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题并尝试了上述所有解决方案。遗憾的是没有任何效果。

          1. 套接字超时(无效)
          2. 用户代理(未工作)
          3. SoapClient 配置,cache_wsdlKeep-Alive 等。

          我们正在传递的整个头球比赛。我通过添加 compression 标头属性解决了我的问题。当您期望 gzip 压缩格式的响应时,这实际上需要。

          //set the Headers of Soap Client. 
          $client = new SoapClient($wsdlUrl, array(
              'trace' => true, 
              'keep_alive' => true,
              'connection_timeout' => 5000,
              'cache_wsdl' => WSDL_CACHE_NONE,
              'compression'   => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
          ));
          

          希望对你有帮助。

          祝你好运。

          【讨论】:

            【解决方案8】:

            在我的 apache 错误日志中,我看到:

            [Tue Feb 16 14:55:02 2010] [notice] child pid 9985 exit signal File size limit exceeded (25)
            

            所以我删除了我最大的日志文件 2.1GB /var/log/system.log 的所有内容。现在一切正常。

            【讨论】:

              【解决方案9】:

              php 版本低于 5.2.6 存在问题。您可能需要升级php的版本。

              【讨论】:

                【解决方案10】:

                请更新您的 php.ini

                default_socket_timeout = 120
                

                如果 php 安装的是 CGI 而不是 Apache 模块,您可以创建自己的 php.ini

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-06-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-07-07
                  • 2012-09-15
                  • 1970-01-01
                  • 2012-02-18
                  • 2015-07-08
                  相关资源
                  最近更新 更多