以下是代码:
$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)。
答案 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使用实际的源文件,它应该可以工作。