From 8f3f4e65e1f1a1a9ca16fce2df231c360b6439c5 Mon Sep 17 00:00:00 2001 From: Andrew Gioia Date: Fri, 8 Dec 2023 09:27:19 -0500 Subject: [PATCH] Moves the PHP class to it's own file, adds some more information on status codes, increases the glitz factor --- class.php | 182 ++++++++++++++++++++++++++++++++++++++ index.php | 260 ++++++++++++++++-------------------------------------- style.css | 16 ++++ 3 files changed, 272 insertions(+), 186 deletions(-) create mode 100644 class.php diff --git a/class.php b/class.php new file mode 100644 index 0000000..c91f409 --- /dev/null +++ b/class.php @@ -0,0 +1,182 @@ +url = $url; + $this->next = ''; + $this->code = 0; + $this->step = 1; + $this->redirect = false; + $this->error = []; + $this->path[$this->step] = [ + 'step' => $this->step, + 'url' => $this->url, + 'code' => null, + 'next' => null ]; + } + + // create an error message + private function setError(array $error): void + { + $this->error = $error; + } + + // add an entry to the URL path + private function addPath(int $step, array $path): void + { + $this->path[$step] = $path; + } + + // update a path entry + public function updatePath(int $step, string $key, string $value): void + { + $this->path[$step][$key] = $value; + } + + // create a curl request for a URL + public function getHttpCode() + { + // initate curl request + $ch = curl_init(); + if (!$ch) { + $this->setError = ['type' => 'curl', 'message' => self::ERROR_CURL_INIT]; + return false; + } + + // set request headers and execute + $response = curl_setopt($ch, CURLOPT_URL, $this->url); + $response = curl_setopt($ch, CURLOPT_HEADER, true); // enable this for debugging + $response = curl_setopt($ch, CURLOPT_HTTPGET, true); // redundant but making sure it's a GET + $response = curl_setopt($ch, CURLOPT_NOBODY, false); // settings this to true was returning 405s + $response = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); + $response = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return output instead of going to screen + $response = curl_setopt($ch, CURLOPT_TIMEOUT, 60); + $response = curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT); + $response = curl_exec($ch); + + // check for a response + if (empty($response)) + { + $this->setError(['type' => 'curl', 'message' => curl_error($ch)]); + curl_close($ch); + } + else + { + // get the http status code + if (curl_getinfo($ch, CURLINFO_HTTP_CODE)) + { + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $this->code = ($code) ? $code : 0; + if ($code == 200) { + $this->updatePath($this->step, 'code', $this->code); + return true; + } + } + else + { + $this->code = 0; + $this->setError(['type' => 'curl', 'message' => self::ERROR_CURL_CODE]); + return false; + } + + // get any redirect url to follow next + if (curl_getinfo($ch, CURLINFO_REDIRECT_URL)) + { + $next = curl_getinfo($ch, CURLINFO_REDIRECT_URL); + $this->redirect = ($next) ? true : false; + $this->next = ($next) ? $next : ''; + } + else + { + $this->redirect = false; + $this->next = ''; + } + + // close the session + curl_close($ch); + + // update the current path + $this->updatePath($this->step, 'code', $this->code); + $this->updatePath($this->step, 'next', $this->next); + + // start the next path + $this->step++; + $this->addPath( + $this->step, + [ + 'step' => $this->step, + 'url' => $this->next, + 'code' => null, + 'next' => null + ]); + + return true; + } + + // return false if we get here + return false; + } + + // get the final URL redirect + public function getFinalRedirect(): string + { + $last = end($this->path); + return $last['url']; + } +} + +// handle form submissions +if (isset($_POST['url'])) +{ + // check that we got a valid URL + $url = (filter_var(trim($_POST['url']), FILTER_VALIDATE_URL)) + ? trim($_POST['url']) + : false; + + // if so, start up the redirect checks + if ($url) + { + // make a request for this url and add to the path + $request = new RedirectCheck($url); + $code = ''; + + do { + // set the URL + $request->url = $url; + + // make the curl request and update the path + $request->getHttpCode(); + + // end on an error + if ($request->error) + { + break; + } + + // if we have a redirect to follow, update our working $url + $url = ($request->next) ? $request->next : false; + + // update our code + $code = ($request->code) ? $request->code : false; + + } while ($code != 200); + } +} +?> \ No newline at end of file diff --git a/index.php b/index.php index 602531d..8911572 100644 --- a/index.php +++ b/index.php @@ -1,187 +1,6 @@ url = $url; - $this->next = ''; - $this->code = 0; - $this->step = 1; - $this->redirect = false; - $this->error = []; - $this->path[$this->step] = [ - 'step' => $this->step, - 'url' => $this->url, - 'code' => null, - 'next' => null ]; - } - - // create an error message - private function setError(array $error): void - { - $this->error = $error; - } - - // add an entry to the URL path - private function addPath(int $step, array $path): void - { - $this->path[$step] = $path; - } - - // update a path entry - public function updatePath(int $step, string $key, string $value): void - { - $this->path[$step][$key] = $value; - } - - // create a curl request for a URL - public function getHttpCode() - { - // initate curl request - $ch = curl_init(); - if (!$ch) { - $this->setError = ['type' => 'curl', 'message' => self::ERROR_CURL_INIT]; - return false; - } - - // set request headers and execute - $response = curl_setopt($ch, CURLOPT_URL, $this->url); - $response = curl_setopt($ch, CURLOPT_HEADER, true); // enable this for debugging - $response = curl_setopt($ch, CURLOPT_HTTPGET, true); // redundant but making sure it's a GET - $response = curl_setopt($ch, CURLOPT_NOBODY, false); // settings this to true was returning 405s - $response = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); - $response = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return output instead of going to screen - $response = curl_setopt($ch, CURLOPT_TIMEOUT, 60); - $response = curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT); - $response = curl_exec($ch); - - // check for a response - if (empty($response)) - { - $this->setError(['type' => 'curl', 'message' => curl_error($ch)]); - curl_close($ch); - } - else - { - // get the http status code - if (curl_getinfo($ch, CURLINFO_HTTP_CODE)) - { - $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $this->code = ($code) ? $code : 0; - if ($code == 200) { - $this->updatePath($this->step, 'code', $this->code); - return true; - } - } - else - { - $this->code = 0; - $this->setError(['type' => 'curl', 'message' => self::ERROR_CURL_CODE]); - return false; - } - - // get any redirect url to follow next - if (curl_getinfo($ch, CURLINFO_REDIRECT_URL)) - { - $next = curl_getinfo($ch, CURLINFO_REDIRECT_URL); - $this->redirect = ($next) ? true : false; - $this->next = ($next) ? $next : ''; - } - else - { - $this->redirect = false; - $this->next = ''; - } - - // close the session - curl_close($ch); - - // update the current path - $this->updatePath($this->step, 'code', $this->code); - $this->updatePath($this->step, 'next', $this->next); - - // start the next path - $this->step++; - $this->addPath( - $this->step, - [ - 'step' => $this->step, - 'url' => $this->next, - 'code' => null, - 'next' => null - ]); - - return true; - } - - // return false if we get here - return false; - } - - // get the final URL redirect - public function getFinalRedirect(): string - { - $last = end($this->path); - return $last['url']; - } -} - -// handle form submissions -if (isset($_POST['url'])) -{ - // check that we got a valid URL - $url = (filter_var(trim($_POST['url']), FILTER_VALIDATE_URL)) - ? trim($_POST['url']) - : false; - - // if so, start up the redirect checks - if ($url) - { - // make a request for this url and add to the path - $request = new RedirectCheck($url); - $code = ''; - - do { - // set the URL - $request->url = $url; - - // make the curl request and update the path - $request->getHttpCode(); - - // end on an error - if ($request->error) - { - break; - } - - // if we have a redirect to follow, update our working $url - $url = ($request->next) ? $request->next : false; - - // update our code - $code = ($request->code) ? $request->code : false; - - } while ($code != 200); - } -} +include('class.php'); ?> - @@ -192,7 +11,7 @@ if (isset($_POST['url']))
-

Redirect Checker

+

Follow URL Redirect Checker

@@ -325,9 +144,78 @@ else Successful (2XX299) -

- 200 -

+
+
+ +
+ +
The request succeeded.
+
+ +
+ +
The request succeeded, and a new resource was created as a result.
+
+ +
+ +
The request has been received but not yet acted upon.
+
+ +
+ +
Typically for mirrors of original resources, the returned metadata is not exactly the same as is available from the origin server but is collected from a local or a third-party copy.
+
+ +
+ +
There is no content to send for this request, but the headers may be useful.
+
+ +
+ +
Tells the user agent to reset the document which sent this request.
+
+ +
+ +
Only part of a resource is sent in response to the Range header.
+
+ +
+ +
Conveys information about multiple resources, for situations where multiple status codes might be appropriate.
+
+ +
+ +
Used inside a <dav:propstat> response element to limit repetition.
+
+ +
+ +
For HTTP Delta encoding when the server has fullfilled a GET request and the response is from 1+ instance manipulations.
+
diff --git a/style.css b/style.css index 990c7c7..2f77c60 100644 --- a/style.css +++ b/style.css @@ -53,9 +53,24 @@ nav a { } h1 { + display: flex; font-size: 1.25rem; + font-weight: 800; margin: 0; } +h1 span { + display: flex; + font-weight: 300; + text-transform: lowercase; + gap: 0.5rem; + margin-left: 0.5rem; +} +h1 span::before { + color: #aaa; + content: '//'; + display: block; + +} form { align-items: stretch; @@ -121,6 +136,7 @@ aside { } details { margin-bottom: 0.5rem; + padding-left: 0.15rem; } summary { cursor: pointer;