未捕获的SoapFault异常:[HTTP]错误获取http标头

时间:2009-05-28 12:44:53

标签: 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 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>

由于

10 个答案:

答案 0 :(得分:37)

尝试设置:

default_socket_timeout = 120

php.ini文件中。

答案 1 :(得分:11)

您是否尝试添加

'trace'=>1,

到SoapClient创建参数,然后:

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

看看发生了什么?

答案 2 :(得分:6)

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

如果您控制服务器,请在托管SOAP服务器的计算机上拖延Apache error_log。在CentOS上,您可以在/ var / log / httpd / error_log中找到它,因此命令为:

tail -f / var / log / httpd / error_log

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

希望能有所帮助。

答案 3 :(得分:4)

我遇到了同样的问题。
我以CLI身份运行它。所以PHP总是在运行,并且必须在一段时间后一次又一次地进行肥皂调用 我做的错误是使用单例模式。我认为使用singleton会导致性能提升但是我得到了

Error Fetching http headers in ...

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

答案 4 :(得分:2)

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

Bug #41983 - Error Fetching http headers

Bug #41983

答案 5 :(得分:1)

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

答案 6 :(得分:1)

我遇到了同样的问题并尝试了以上所有解决方案。可悲的是没有任何工作。

  1. 套接字超时(未使用)
  2. 用户代理(未使用)
  3. SoapClient配置, cache_wsdl Keep-Alive 等。
  4. 我们传递的整个标题游戏。我通过添加压缩标头属性解决了我的问题。当您期望以 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,
    ));
    

    希望它有所帮助。

    祝你好运。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

请用

更新您的php.ini
default_socket_timeout = 120

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