From 4c0f5a738aaa5897cc36062d9555b2edbf5142f5 Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Mon, 29 Apr 2024 09:36:51 +0200 Subject: Version 2 of: Switch it_url::get('assoc' => true) to always return non-empty array including at least the HTTP status code --- it_url.class | 7 ++++--- test/it_url.t | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/it_url.class b/it_url.class index 637990c..d9e4869 100644 --- a/it_url.class +++ b/it_url.class @@ -150,7 +150,7 @@ function _get($p = []) usleep($p['fetchsleep'] * 1000000); if ($p['assoc']) - $result = $result !== false ? [ 'status' => $this->result, 'data' => $this->data, 'headers' => $this->headers, 'cookies' => $this->cookies, 'errstr' => $this->errstr ] : []; + $result = [ 'status' => intval($this->result) ?: 503, 'data' => $result !== false ? $this->data : null, 'headers' => $this->headers, 'cookies' => $this->cookies, 'errstr' => $this->errstr ]; EDC('curlinfo', $this->result, $this->headers, $this->cookies, $this->errstr); @@ -615,10 +615,11 @@ static function get_cache($p = array()) EDC('getcache', "new", $filemtime, $p['url'], $path); $url = new it_url; - if ($data = $url->_get($p + ['checkonly' => true, 'filemtime' => EDC('nocache') ? null : $filemtime])) # => true means not modified (no new data fetched) + $data = $url->_get($p + ['checkonly' => true, 'filemtime' => EDC('nocache') ? null : $filemtime]); + if ($p['assoc'] ? ($data['status'] == 304 || $data['data']) : $data) { $success = true; - $isnewfile = it_url::_atomicwrite($path, $p['assoc'] ? it::json_encode($data) : $data); + $isnewfile = it_url::_atomicwrite($path, $p['assoc'] ? ($data['status'] === 304 ? true : it::json_encode($data)) : $data); # $data === true means not modified (no new data fetched) and instructs _atomicwrite to just touch the file if ($p['returnheaders']) it::file_put("$path.json", it::json_encode($url->headers)); } diff --git a/test/it_url.t b/test/it_url.t index 568feda..47064b5 100755 --- a/test/it_url.t +++ b/test/it_url.t @@ -272,7 +272,7 @@ $output = handle_server( $output = handle_server( is( it::filter_keys(it_url::get(['url' => "http://$host/not_found_with_body", 'empty_on_fail' => true, 'it_error' => false, 'assoc' => true]), 'status,data'), - [], + ['status' => 404, 'data' => null], 'it_url::get() on 404 with body, empty_on_fail and assoc' ) ); -- cgit v1.2.3