SoapFault 异常: [HTTP] 获取 http 标头时出错

2022-08-31 01:10:17

我在我的php页面中遇到以下异常。

SoapFault 异常: [HTTP] 获取 http 标头时出错

我读了几篇文章,发现default_socket_timeout需要配置。所以我把它设置如下。default_socket_timeout = 480

我仍然收到相同的错误。有人可以帮助我吗?


答案 1

我得到有两个原因:Error fetching http headers

  1. 服务器需要很长时间才能应答。
  2. 服务器不支持连接(我的答案涵盖了连接)。Keep-Alive

PHP 将始终尝试通过发送 HTTP 标头来使用与 Web 服务的持久连接。如果服务器始终关闭连接并且没有这样做(PHP尚未收到),则可以在PHP尝试重用在服务器端已关闭的连接时获得。Connection: Keep-AliveEOFError fetching http headers

注意:仅当同一对象以高频率发送多个请求时,才会发生这种情况。将HTTP标头与第一个请求一起发送可以解决此问题。SoapClientConnection: close

在 PHP 版本 5.3.5(当前随 Ubuntu 一起提供)中,SoapClient 不支持设置 HTTP 标头。应该能够在流上下文中发送 HTTP 标头(使用 - key 作为参数),但 SoapClient 不支持更改连接标头更新:此错误已在 PHP 版本 5.3.11 中解决)。Connection: Close$optionstream_contextSoapClient

另一种解决方案是实现您自己的__doRequest()。。在提供的链接上,一个人用来发送请求。这将使您的 PHP 应用程序依赖于 。该实现还缺少保存请求/响应标头等功能。CurlCurl

第三种解决方案是在收到响应后立即关闭连接。这可以通过将 SoapClients 属性设置为 in 或 来完成。示例:httpsocketNULL__doRequest()__call()__soapCall()__call()

class MySoapClient extends SoapClient {
    function __call ($function_name , $arguments) {
        $response = parent::__call ($function_name , $arguments);
        $this->httpsocket = NULL;
        return $response;
    }
}

答案 2

我遇到了同样的问题,并通过禁用尝试了以下方法。keep_alive

$api_proxy = new SoapClient($api_url, array('trace' => true, 'keep_alive' => false));

但是,这对我来说不起作用。对我有用的是禁用 SOAP 缓存。它似乎缓存了错误的请求,禁用后,我实际上注意到我的请求执行速度更快。

在 Linux 服务器上,您可以在文件中找到它。/etc/php.ini

查找并将其更改为 。soap.wsdl_cache_enabled=1soap.wsdl_cache_enabled=0

不要忘记重新加载apache。service httpd reload


推荐