XMLRPC Zend_Http_Client_Adapter_Exception',带有消息'10秒后读取超时

时间:2010-12-30 15:07:30

标签: php zend-framework httpwebrequest xml-rpc config

我在谷歌搜索过,但没有人发布解决方案,他们都说要在配置中设置超时但是你怎么做?

如何从XMLRPC客户端或服务器重置/覆盖此设置?

以下是我正在尝试的内容:

$server = new Zend_XmlRpc_Client('http://127.0.0.1/xmlrpc');
$client = $server->getProxy(); 

// Increasing the timeout
$client->setConfig(array('timeout'=>30));

这是错误:

Fatal error: Uncaught exception 'Zend_XmlRpc_Client_FaultException' 
with message 'Method "setConfig" does not exist' 
in /usr/share/php/libzend-framework-php/Zend/XmlRpc/Client.php:370

尝试传递为arg:

$server = new Zend_XmlRpc_Client('http://127.0.0.1/xmlrpc', array('timeout'=>30));

这是错误:

Catchable fatal error: Argument 2 passed to 
Zend_XmlRpc_Client::__construct() must be an 
instance of Zend_Http_Client

找到解决方案,在这里:

$server = new Zend_XmlRpc_Client('http://127.0.0.1/xmlrpc');

// Get the HTTP Client used by the XMLRPC client
$http_client = $server->getHttpClient();

// Increasing the HTTP timeout
$http_client->setConfig(array('timeout'=>30));

$client = $server->getProxy(); 

One Line也适用于我:

$server = new Zend_XmlRpc_Client('http://127.0.0.1/xmlrpc');

// Get the HTTP Client used by the XMLRPC client and increasing the HTTP timeout
$server->getHttpClient()->setConfig(array('timeout'=>30));

$client = $server->getProxy();

3 个答案:

答案 0 :(得分:16)

Zend documentation指定允许使用的配置参数。我猜你可以简单地将超时从10秒增加到20或30.适合你的任何事情。

$client = new Zend_Http_Client('http://example.org', array('timeout' => 30));

或:

$client->setConfig(array('timeout'=>30));

UPDATE - Zend_Http_Client由Zend_XmlRpc_Client使用。您可以通过Zend_XmlRpc_Client对象设置和访问Zend_Http_Client。

$xmlrpc_client = new Zend_XmlRpc_Client('http://127.0.0.1/xmlrpc');
$xmlrpc_client->getHttpClient()->setConfig(array('timeout'=>30'));

我没有对此进行测试,所以我不知道它会起作用,但你也可以使用setHttpClient()方法将你自己的Zend_Http_Client对象传递给Zend_XmlRpc_Client对象,如下所述(相当古怪) Zend documentation page for Zend_XmlRpc_Client

答案 1 :(得分:1)

无论您使用何种客户:

$client->getHttpClient()->setConfig(array('timeout'=>30));

其中$client可以是休息或肥皂客户端。

此外,其中一个答案有一个小错误,导致疼痛:

client->getHttpClient()->setConfig(array('timeout'=>30')); - remove single quote after 30

答案 2 :(得分:0)

这些答案没问题,但是自从Zend HTTP 2.0 (2012年发布 - see diff以来,它就是:

$client->getHttpClient()->setOptions(array('timeout'=>30));