2

我对 SOAP 有疑问,还没有找到真正的答案。

try {
    $objResponse = $objSoapClient->$strMethod($objMethod->getSoapRequest());
}
catch (SoapFault $e) {  
    GlobalLogState::write("exception with code(".$e->getCode()."): \n".$e->getMessage());
}

这是我在 try catch 块中的简单 SOAP 请求。

我收到了 SoapFault 异常:

Error Fetching http headers

这是什么原因?

4

2 回答 2

1

对我有用的配置是在我的 php 脚本中定义以下参数:

    ini_set('default_socket_timeout', 5000);
    $client = new \SoapClient($url,array(
    'trace' =>true,
    'connection_timeout' => 5000,
    'cache_wsdl' => WSDL_CACHE_NONE,
    'keep_alive' => false,
));

请评论。

根据我对这个问题的经验,最重要的参数定义是 ini_set('default_socket_timeout', 5000);

在我的测试中,我将 default_socket_timeout 定义为 5 秒,并且立即引发了错误“错误获取 http 标头”。

我希望它对你有帮助。

于 2017-11-30T10:53:22.107 回答
0

要修复这个错误,我们可以增加或者增加套接字超时default_socket_timephp.ini或者connection_timeout在传递给 SoapClient 的构造函数的参数数组中添加参数。

这些参数以为单位。

  1. 在 php.ini 中

    default_socket_timeout = 120

或者,您可以从代码更改

ini_set('default_socket_timeout', 120);

注意:php 中默认的套接字超时时间是 60 秒。

  1. connection_timeoutSoapClient 构造函数中的参数

$client = new SoapClient($wsdl, array('connection_timeout' => 120));

于 2014-10-02T10:55:18.743 回答