SoapFault 异常: [HTTP] 获取 http 标头时出错
我在我的php页面中遇到以下异常。
SoapFault 异常: [HTTP] 获取 http 标头时出错
我读了几篇文章,发现default_socket_timeout需要配置。所以我把它设置如下。default_socket_timeout = 480
我仍然收到相同的错误。有人可以帮助我吗?
我在我的php页面中遇到以下异常。
SoapFault 异常: [HTTP] 获取 http 标头时出错
我读了几篇文章,发现default_socket_timeout需要配置。所以我把它设置如下。default_socket_timeout = 480
我仍然收到相同的错误。有人可以帮助我吗?
我得到有两个原因:Error fetching http headers
Keep-Alive
PHP 将始终尝试通过发送 HTTP 标头来使用与 Web 服务的持久连接。如果服务器始终关闭连接并且没有这样做(PHP尚未收到),则可以在PHP尝试重用在服务器端已关闭的连接时获得。Connection: Keep-Alive
EOF
Error fetching http headers
注意:仅当同一对象以高频率发送多个请求时,才会发生这种情况。将HTTP标头与第一个请求一起发送可以解决此问题。SoapClient
Connection: close
在 PHP 版本 5.3.5(当前随 Ubuntu 一起提供)中,SoapClient 不支持设置 HTTP 标头。应该能够在流上下文中发送 HTTP 标头(使用 - key 作为参数),但 SoapClient
不支持更改连接标头(更新:此错误已在 PHP 版本 5.3.11 中解决)。Connection: Close
$option
stream_context
SoapClient
另一种解决方案是实现您自己的__doRequest()。
。在提供的链接上,一个人用来发送请求。这将使您的 PHP 应用程序依赖于 。该实现还缺少保存请求/响应标头等功能。Curl
Curl
第三种解决方案是在收到响应后立即关闭连接。这可以通过将 SoapClients 属性设置为 in 或 来完成。示例:httpsocket
NULL
__doRequest()
__call()
__soapCall()
__call()
class MySoapClient extends SoapClient {
function __call ($function_name , $arguments) {
$response = parent::__call ($function_name , $arguments);
$this->httpsocket = NULL;
return $response;
}
}
我遇到了同样的问题,并通过禁用尝试了以下方法。keep_alive
$api_proxy = new SoapClient($api_url, array('trace' => true, 'keep_alive' => false));
但是,这对我来说不起作用。对我有用的是禁用 SOAP 缓存。它似乎缓存了错误的请求,禁用后,我实际上注意到我的请求执行速度更快。
在 Linux 服务器上,您可以在文件中找到它。/etc/php.ini
查找并将其更改为 。soap.wsdl_cache_enabled=1
soap.wsdl_cache_enabled=0
不要忘记重新加载apache。service httpd reload