【问题标题】:Sockets - time out套接字 - 超时
【发布时间】:2014-04-21 04:43:22
【问题描述】:

我正在尝试连接到 wsdl 服务, 但收到此错误:

wsdl 错误:获取http://api.didww.com/api/?wsdl - HTTP 错误:套接字读取标头超时

本地没有问题,但在远程服务器上出现此错误。

远程服务器:Linux CentOS (FreePBX)

代码:

$client = new soapclient($site, true);
$err = $client->getError();
if ($err)
{
    echo 'ERROR: ' . $err . '</pre>';
}

$username = 'XXXX';
$_key = 'YYYY';
$auth_string = sha1($username.$_key);

$arr = array();
$arr[0] = $auth_string;
$arr[1] = $country_id;

$result = $client->call('getcities', $arr);

if ($client->fault)
{
    echo '<pre>';
    print_r($result);
    echo '</pre>';
}
else
{
    $err = $client->getError();
    if ($err)
    {
        echo 'Error: <pre>' . $err . '</pre>';
    }
}
echo '<pre>';
print_r($result);
echo '</pre>';

【问题讨论】:

  • 你确定它不是防火墙相关的吗?您是否尝试过以其他方式连接到目标服务器?
  • 我关闭了防火墙,还是一样的问题。
  • “default_socket_timeout”的超时设置是多少?
  • 你能否从该服务器上的任何 http 源获取数据,例如&lt;?php $c = file_get_contents('http://stackoverflow.com'); ?
  • 检查 php.ini 或使用 $setting = ini_get('default_socket_timeout');您也可以尝试使用soapclient参数设置conn timeout和resp timeout

标签: php sockets centos


【解决方案1】:

在 ini 中设置了默认套接字超时,因此您可以增加它并查看它是否有效

ini_set('default_socket_timeout', 160);

或者你可以将它作为构造函数参数(选项)传递给soapclient

$client = new SoapClient($wsdl, array("connection_timeout"=>15));

【讨论】:

  • 它可以工作,但问题是加载需要很长时间,平均为 1:30,在本地服务器和其他服务器上,需要几毫秒。可能是什么问题?
猜你喜欢
  • 1970-01-01
  • 2012-03-08
  • 2011-05-11
  • 2013-05-23
  • 2019-07-11
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多