Background:
I am using google app engine and am having a weird bug in my site crawler.
I have a backend that will automatically crawl a site every night. This is instigated by a task pushed to a pushQueue due to time limits in php.
Problem:
When I manually run the script that creates the task, the task completes as expected with no errors. However when cron launches the task I get the following error.
Call to URLFetch failed with application error 5 for url x
Code:
function url_get_contents ($Url) {
global $retry;
try {
if (!function_exists('curl_init')){
die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return $output;
} catch (Exception $e) {
syslog(LOG_INFO, 'Caught exception: ', $e->getMessage());
if($retry > 0){
$retry -= 1;
return url_get_contents($Url);
}
else{
return null;
}
}
}
Thanks to syslog I can see that the $url is fine which is driving me crazy as it works when the exact same script is launched manually not through cron.
How can I fix this?
Thanks in advance.
EDIT: curl is definitely installed, as you have a statement which checks it in the first place, so my answer no longer stands.
The CURL error list http://curl.haxx.se/libcurl/c/libcurl-errors.html says that error 5 is CURLE_COULDNT_RESOLVE_PROXY. Somehow your curl cannot access web, probably.
The curl is probably not enabled for your CLI environment.
Check out the configuration here: