使用Goutte获取cURL超时错误,即使使用配置设置也是如此

时间:2014-07-15 22:28:24

标签: php curl goutte

以下是代码:

$this->baseUrl = "https://sfbay.craigslist.org/sfc/apa/";
$this->client = new Goutte\Client();
$curlOptions = array(
    CURLOPT_CONNECTTIMEOUT => 600,
    CURLOPT_TIMEOUT => 600
);
$this->client->getClient()->setDefaultOption('config', ['curl' => $curlOptions]);
$crawler = $this->client->request("GET", $this->baseUrl);

错误(重复两次): PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException' with message '[curl] (#28) See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of cURL errors [url] https://sfbay.craigslist.org/sfc/apa/' in /Users/...../vendor/guzzlehttp/guzzle/src/Adapter/Curl/MultiAdapter.php:216

问题是:一小时前代码工作,没问题!在发现错误#28超时后,我添加了cURL选项。

我错过了cURL选项吗?或者我可能错误地设置了值?为什么改变?我的网络速度并不快(AFAIK)。

3 个答案:

答案 0 :(得分:1)

好的,我发现了我的代码问题。

这是优先权。我把它放在了:

$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_TIMEOUT, 0);
$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_TIMEOUT_MS, 0);
$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_CONNECTTIMEOUT, 0);
$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_RETURNTRANSFER, true);

之前:

$crawler = $client->request('GET', $my_url);

它有效!

答案 1 :(得分:1)

“GuzzleHttp”代码已更新。因此,您需要将curl设置为

$client = new \Goutte\Client();

$guzzleClient = new \GuzzleHttp\Client(array(
    'curl' => array(
        CURLOPT_TIMEOUT => 60,
    ),
));
$client->setClient($guzzleClient);
$crawler = $client->request('GET', $my_url); 

答案 2 :(得分:0)

我遇到了同样的问题。你在使用从git下载的goutte.phar吗?

如果是这样,那就是问题。

通过autoloading composer使用实际的源文件,它应该可以工作。