cURL请求出错:名称查找超时

时间:2012-10-31 08:02:26

标签: php zend-framework curl dns zend-http-client

我写了一些填写登录表单并通过post方法提交的代码。像:

    $config = array(
        'adapter' => 'Zend_Http_Client_Adapter_Curl',
    );      

    $this->siteObj = new Zend_Http_Client('http://example.com', $config);
    $this->siteObj->setCookieJar();
    $this->siteObj->setUri('http://example.com/login');
    $this->siteObj->setParameterPost( 'data[User][name]', 'user' );
    $this->siteObj->setParameterPost( 'data[User][password]', 'password' );
    $response = $this->siteObj->request('POST');

它的工作正常,但有时会发生此错误:

Error in cURL request: name lookup timed out

Error: An Internal Error Has Occurred.

问题是什么?我能做些什么来解决它?

3 个答案:

答案 0 :(得分:11)

我遇到了同样的问题:

  • 从外壳中,卷曲起作用。
  • 从shell开始,PHP脚本有效。
  • PHP无法ping网站。
  • DNS配置正确。

重新启动Apache后,它运行良好。太奇怪了。

答案 1 :(得分:4)

这意味着您的DNS服务器无法及时返回响应。检查您的DNS配置(例如Linux上的/etc/resolv.conf),并确保它们存活且功能正常。还尝试在同一服务器的URL中ping主机,以了解问题是仅在PHP中还是在服务器上运行的任何应用程序(更有可能)。

答案 2 :(得分:4)

可能是超时问题。 尝试调整连接超时:

$config = array(
  'adapter' => 'Zend_Http_Client_Adapter_Curl',
  'timeout' => 100
);

您还可以设置单个 curl 选项:

$config = array(
    'adapter'   => 'Zend_Http_Client_Adapter_Curl',
    'curloptions' => array(
        CURLOPT_USERAGENT      => 'Zend_Curl_Adapter',
        CURLOPT_HEADER         => 0,
        CURLOPT_VERBOSE        => 0,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_TIMEOUT        => 10,
        CURLOPT_SSL_VERIFYPEER => false,
    ),
);

如果您发现这是一个超时问题,我建议不要过多地增加超时参数,而是要通过重试次数来设置 for 循环。