function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_content=Null, $cookiejar = 0) {
$ret = z_fetch_url(
- $url,
- $binary,
- $redirects,
- array('timeout'=>$timeout,
+ $url,
+ $binary,
+ $redirects,
+ array('timeout'=>$timeout,
'accept_content'=>$accept_content,
'cookiejar'=>$cookiejar
));
-
-
return($ret['body']);
}}
* * \b novalidate => do not validate SSL certs, default is to validate using our CA list
* * \b nobody => only return the header
* * \b cookiejar => path to cookie jar file
- *
+ *
* @return array an assoziative array with:
* * \e int \b return_code => HTTP return code or 0 if timeout or failure
* * \e boolean \b success => boolean true (if HTTP 2xx result) or false
+ * * \e string \b redirect_url => in case of redirect, content was finally retrieved from this URL
* * \e string \b header => HTTP headers
* * \e string \b body => fetched content
*/
function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) {
$ret = array('return_code' => 0, 'success' => false, 'header' => "", 'body' => "");
-
+
$stamp1 = microtime(true);
if(x($opts,'nobody')){
@curl_setopt($ch, CURLOPT_NOBODY, $opts['nobody']);
}
- if(intval($timeout)) {
- @curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
- }
- else {
+ if(x($opts,'timeout')){
+ @curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
+ } else {
$curl_time = intval(get_config('system','curl_timeout'));
@curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
}
// if it throws any errors.
$s = @curl_exec($ch);
+ if (curl_errno($ch) !== CURLE_OK) {
+ logger('fetch_url error fetching '.$url.': '.curl_error($ch), LOGGER_NORMAL);
+ }
$base = $s;
$curl_info = @curl_getinfo($ch);
$base = substr($base,strlen($chunk));
}
+ $a->set_curl_code($http_code);
+ $a->set_curl_content_type($curl_info['content_type']);
+ $a->set_curl_headers($header);
+
if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
$new_location_info = @parse_url($curl_info["redirect_url"]);
$old_location_info = @parse_url($curl_info["url"]);
if (filter_var($newurl, FILTER_VALIDATE_URL)) {
$redirects++;
@curl_close($ch);
- return fetch_url($newurl,$binary,$redirects,$timeout,$accept_content,$cookiejar);
+ return z_fetch_url($newurl,$binary, $redirects, $opts);
}
}
$a->set_curl_content_type($curl_info['content_type']);
$body = substr($s,strlen($header));
- $a->set_curl_headers($header);
$rc = intval($http_code);
$ret['return_code'] = $rc;
$ret['success'] = (($rc >= 200 && $rc <= 299) ? true : false);
+ $ret['redirect_url'] = $url;
if(! $ret['success']) {
$ret['error'] = curl_error($ch);
$ret['debug'] = $curl_info;
$ret['debug'] = $curl_info;
}
@curl_close($ch);
-
+
$a->save_timestamp($stamp1, "network");
-
+
return($ret);
}}
if(! function_exists('http_status_exit')) {
-function http_status_exit($val) {
-
+function http_status_exit($val, $description = array()) {
$err = '';
- if($val >= 400)
+ if($val >= 400) {
$err = 'Error';
+ if (!isset($description["title"]))
+ $description["title"] = $err." ".$val;
+ }
if($val >= 200 && $val < 300)
$err = 'OK';
logger('http_status_exit ' . $val);
header($_SERVER["SERVER_PROTOCOL"] . ' ' . $val . ' ' . $err);
+
+ if (isset($description["title"])) {
+ $tpl = get_markup_template('http_status.tpl');
+ echo replace_macros($tpl, array('$title' => $description["title"],
+ '$description' => $description["description"]));
+ }
+
killme();
}}
$lines = explode("\n",$headers);
if(count($lines)) {
foreach($lines as $line) {
- // TODO alter the following regex to support multiple relations (space separated)
+ /// @TODO Alter the following regex to support multiple relations (space separated)
if((stristr($line,'link:')) && preg_match('/<([^>].*)>.*rel\=[\'\"]lrdd[\'\"]/',$line,$matches)) {
$pagelink = $matches[1];
break;
$a->save_timestamp($stamp1, "network");
+ if ($http_code == 0)
+ return($url);
+
if ((($curl_info['http_code'] == "301") OR ($curl_info['http_code'] == "302"))
AND (($curl_info['redirect_url'] != "") OR ($curl_info['location'] != ""))) {
if ($curl_info['redirect_url'] != "")