14

我编写了一些代码来填写登录表单并通过 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.

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

4

3 回答 3

11

我遇到了同样的问题:

  • 从外壳, curl 工作。
  • 在 shell 中,PHP 脚本起作用了。
  • PHP 无法 ping 该网站。
  • DNS 配置是正确的。

重新启动 Apache 后,它工作了。这么奇怪。

于 2014-10-13T08:42:39.583 回答
5

It can be a timeout problem. Try adjusting the connection timeout:

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

you can also set single curl options:

$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,
    ),
);

If you find out that it is a timeout issue, I would not suggest to increase too much the timeout parameter, but rather to make a for loop with a number of retries.

于 2012-11-03T12:34:58.947 回答
4

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

于 2012-10-31T08:12:37.120 回答