Php 未捕获的SoapFault异常:[HTTP]获取HTTP头时出错

Php 未捕获的SoapFault异常:[HTTP]获取HTTP头时出错,php,soap,magento,wsdl,Php,Soap,Magento,Wsdl,我正在尝试创建到Magento的web服务的soap连接,但是在尝试创建soap客户机类的实例时遇到了一个错误。我可以在firefox中毫无问题地查看wsdl文件,我可以看到php在apaches日志中请求wsdl,但仍然失败。Nusoap可以连接 $proxy = new SoapClient('someaddress?wsdl'); 错误是 <b>Fatal error</b>: Uncaught SoapFault exception: [HTTP] Error

我正在尝试创建到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>
致命错误:未捕获的SoapFault异常:[HTTP]在/home/sites/xxx/xxx\u main/system/application/views/contentpage\u templates/gift\u service中获取HTTP头时出错。php:29
堆栈跟踪:
[内部函数]:SoapClient-_doRequest('?xml version=“…”,'http://cornishw...“,“urn:Mage_Api_Mo…”,1,0)
[内部函数]:SoapClient-\u调用('调用',数组)
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29):SoapClient调用(NULL,'catalog_categor…',5,'giftshop')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586):包括('/home/sites/cor.)
/home/sites/xxx/xxx\u main/system/application/libraries/MY\u Loader.php(228):MY\u Loader-\u ci\u load(数组“”)
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44):MY_Loader-view('contentpage_tem…',false,true)
[内部函数]:Contentpage-index()
/第29行的home/sites/xxx in/home/sites/xxx/xxx\u main/system/application/views/contentpage\u templates/gift\u service.php

谢谢

我不了解您的PHP配置,但在PHP 5.2.6之前,PHP确实存在SOAP客户端问题:

您是否尝试添加

'trace'=>1,
要创建SoapClient参数,请执行以下操作:

var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
要查看发生了什么?

请尝试设置:

default_socket_timeout = 120

在您的
php.ini
文件中。

在我的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中的所有内容。现在一切正常。

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

如果服务器端出现问题,此错误可能会出现在客户端。例如,如果SOAP服务器是带有PAR的php脚本e错误,客户端将失败并显示此消息

如果您控制服务器,请在承载SOAP服务器的计算机上跟踪Apache错误日志。在CentOS上,您将在/var/log/httpd/error\u日志中找到此日志,因此命令为:

tail-f/var/log/httpd/error\u log

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


希望这对其他人有所帮助。

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

我也遇到了同样的问题。
我是以CLI的形式运行它的,所以PHP总是在运行,它必须在一段时间后一次又一次地进行soap调用。
我犯的错误是使用了单例模式。我以为使用单例模式会提高性能,但我得到了

Error Fetching http headers in ...

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

请使用

default_socket_timeout = 120

如果php安装的是CGI而不是Apache模块,那么您可以创建自己的php.ini。我遇到了同样的问题,并尝试了上述所有解决方案。遗憾的是,没有任何效果

  • 套接字超时(未工作)
  • 用户代理(未工作)
  • SoapClient配置、缓存wsdl保持活动状态
  • 我们正在传递的整个标题游戏。我通过添加compressionheader属性解决了我的问题。实际上,当您希望以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,
    ));
    
    希望能有帮助


    祝你好运。

    我可能弄错了,但调用堆栈中带有“gift_service.php(29):SoapClient调用(NULL,'catalog_categor…'”的行似乎与“$proxy=new SoapClient”不对应,而是类似于“proxy->catalog_categories()”?请(双击)检查gift_service.php中的第29行,这对我在与Magento完全无关的情况下有帮助。这也可以在运行时使用
    ini_set('default_socket_timeout',120)完成
    ,如果以后要恢复,它将为您提供原始值。这有助于我了解soap请求缺少正确的参数,但我不知道为什么wsdl文件没有正确更新。