php soap 错误获取 http header

标签 php soap connection-timeout

我正在编写一个 PHP 脚本,该脚本通过 SOAP 连接处理大量数据。如果没有遇到任何错误,脚本的总运行时间估计需要几天时间。我遇到的问题是脚本会运行一段时间,从一个小时到一天不等,然后 SOAP 连接将终止并出现错误 “error fetching http headers”

我看过很多文章建议增加 default_socket_timeout 设置,我已经试过了。它没有帮助。我知道它是有效的,因为它在失败之前至少进行了一百次成功的调用。我能做些什么来阻止这个错误吗?

更新
我打印了请求和响应 header ,希望能在其中看到错误。但看起来他们很好:

HTTP/1.1 200 OK
Date: Wed, 25 Sep 2013 21:00:12 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.3.3
Content-Length: 516
Connection: close
Content-Type: text/xml; charset=UTF-8

就示例代码而言,实际脚本非常长,但基本前提是:

ini_set('default_socket_timeout', 120);
$client = new SoapClient($wsdl,array(
    'trace' =>true,
    'connection_timeout' => 500000,
    'cache_wsdl' => WSDL_CACHE_BOTH,
    'keep_alive' => true,
));
while(!$finished) {
    $finished = $client->someSoapFunction($data);
}

someSoapFunction() 将返回 100 个连接的有效数据,然后随机返回上述错误。它运行的时间小于任一设置的超时时间。我的 php 或 apache 错误日志中没有任何错误。我很难过。

最佳答案

我知道这是一个老问题,但也许我的解决方案对其他人有用。 我遇到了同样的问题,通过在创建 SoapClient 对象时将“keep_alive”参数更改为 false,我的问题得到解决:

$client = new SoapClient($wsdl,array(
'trace' =>true,
'connection_timeout' => 500000,
'cache_wsdl' => WSDL_CACHE_BOTH,
'keep_alive' => false,
));

关于php soap 错误获取 http header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010165/

相关文章:

java - 使用 Java 中的套接字自动重新连接到服务器

php - 循环显示其他表中的值

c# - 如何分块读取大量数据?

java - Nest 恒温器 API : Connection time out after establishing a request using the retrieved access_token

c - 在 C 中发送/接收 SOAP 请求/响应

java - 如何用多个wsdl文件生成一个services.xml

PHP file_get_contents 忽略超时?

php - Laravel:如何显示配置?

php - 定时账户访问(PHP/mysql)

php - Mysql数组没有找到结果