From 259620079ef46b380cf11c5c10bfc445342e8337 Mon Sep 17 00:00:00 2001 From: Netkas Date: Thu, 15 Dec 2022 17:49:09 -0500 Subject: [PATCH] Implemented HttpResponse cache to reduce hitting rate-limits for redundant requests (plus it makes requests faster) --- src/ncc/Utilities/HttpClient.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/ncc/Utilities/HttpClient.php b/src/ncc/Utilities/HttpClient.php index ebded8e..464101f 100644 --- a/src/ncc/Utilities/HttpClient.php +++ b/src/ncc/Utilities/HttpClient.php @@ -6,6 +6,7 @@ use ncc\Exceptions\HttpException; use ncc\Objects\HttpRequest; use ncc\Objects\HttpResponse; + use ncc\Objects\HttpResponseCache; class HttpClient { @@ -13,11 +14,22 @@ * Creates a new HTTP request and returns the response. * * @param HttpRequest $httpRequest + * @param bool $cache * @return HttpResponse * @throws HttpException */ - public static function request(HttpRequest $httpRequest): HttpResponse + public static function request(HttpRequest $httpRequest, bool $cache=false): HttpResponse { + if($cache) + { + /** @var HttpResponseCache $cache */ + $cache = RuntimeCache::get(sprintf('http_cache_%s', $httpRequest->requestHash())); + if($cache !== null && $cache->getTtl() > time()) + { + return $cache->getHttpResponse(); + } + } + $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $httpRequest->Url); @@ -100,6 +112,12 @@ curl_close($curl); + if($cache) + { + $httpCacheObject = new HttpResponseCache($httpResponse, 60); + RuntimeCache::set(sprintf('http_cache_%s', $httpRequest->requestHash()), $httpCacheObject); + } + return $httpResponse; }