ThomasKujawa

Url-Test with Guzzle

Jun 18th, 2021 (edited)
209
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. use GuzzleHttp\Exception\GuzzleException;
  4.  
  5. $mailAuth   = [
  6.     'user'     => getenv('MAILADDR_USERNAME'),
  7.     'password' => getenv('MAILADDR_PASSWORD'),
  8. ];
  9. $empfaenger = [
  10.     'emailAdresse' => getenv('MAILADDR_TECHNIK'),
  11.     'name'         => 'Url Test',
  12. ];
  13.  
  14. if (!empty($datensatz['Internetadresse'])) {
  15.     try {
  16.         $response = fetchResponse($datensatz['Internetadresse']);
  17.    
  18.         if ($response === 404) {
  19.             $betreff   = '[FFE url-test.php] HTTP Status 404 | Mitteilung | ID lautet: ' . $nummer;
  20.             $text      = 'Der Status der Internetadresse ist 404, also nicht (mehr) erreichbar. ' . PHP_EOL;
  21.             $sql404    = 'UPDATE `` SET `Internetadresse`= ? WHERE `Nummer`= ?';
  22.             $statement = $db->prepare($sql404);
  23.             $null      = null;
  24.             $statement->execute([$null, $nummer]);
  25.             sendeMail($mailAuth, $empfaenger, $betreff, $text);
  26.         }
  27.    
  28.         if ($response === 301 || $response === 302) {
  29.             $neueAdresse = trim(fetchRedirectUrl($datensatz['Internetadresse']));
  30.             $betreff     = '[FFE url-test.php] HTTP Status 30x | Mitteilung | ID lautet: ' . $nummer;
  31.             $text        = 'Der Status der Internetadresse war 301 oder 302, also umgeleitet.' . PHP_EOL;
  32.             $sql301      = 'UPDATE `` SET `Internetadresse`= ? WHERE `Nummer`= ?';
  33.             $statement   = $db->prepare($sql301);
  34.             $statement->execute([$neueAdresse, $nummer]);
  35.             sendeMail($mailAuth, $empfaenger, $betreff, $text);
  36.         }
  37.     } catch (GuzzleException $e) {
  38.         $logger->debug($e->getMessage());
  39.     } catch (\PHPMailer\PHPMailer\Exception $exception) {
  40.         $logger->error($exception->getMessage());
  41.     }
  42. }
  43.  
  44. ---
  45.     /**
  46.  * @param string $url Die Url der Webseite
  47.  *
  48.  * @return int
  49.  * @throws GuzzleException
  50.  */
  51. function fetchResponse(string $url): int
  52. {
  53.     $http_client = new Client(['base_uri' => $url]);
  54.     $options     = [
  55.         'headers'         => [
  56.             'User-Agent'      => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15',
  57.             'Accept'          => 'application/json',
  58.             'Accept-Language' => 'de-de',
  59.             'Accept-Encoding' => 'br, gzip, deflate',
  60.             'X-Foo'           => ['Bar', 'Baz'],
  61.             'Referer'         => 'mywebsite',
  62.         ],
  63.         'allow_redirects' => false,
  64.     ];
  65.     $response    = $http_client->request('GET', '', $options);
  66.    
  67.     return $response->getStatusCode();
  68. }
  69.  
  70. /**
  71.  * @param string $url Die Url der Webseite
  72.  *
  73.  * @return string
  74.  */
  75. function fetchRedirectUrl(string $url): string
  76. {
  77.     $http_client = new Client(['base_uri' => $url]);
  78.     try {
  79.         $response    = $http_client->request(
  80.             'GET',
  81.             '',
  82.             [
  83.                 'headers'         => [
  84.                     'User-Agent'      => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15',
  85.                     'Accept'          => 'application/json',
  86.                     'Accept-Language' => 'de-de',
  87.                     'Accept-Encoding' => 'br, gzip, deflate',
  88.                     'X-Foo'           => ['Bar', 'Baz'],
  89.                     'Referer'         => 'mywebsite',
  90.                 ],
  91.                 'allow_redirects' => [
  92.                     'track_redirects' => true,
  93.                 ],
  94.             ],
  95.         );
  96.         $redirects   = explode(',', $response->getHeaderLine('X-Guzzle-Redirect-History'));
  97.         $redirectUrl = array_reverse($redirects)[0];
  98.        
  99.         return $redirectUrl;
  100.     } catch (GuzzleException $exception) {
  101.         // TODO just catching, logger still missing
  102.         $redirectUrl = 'Error';
  103.        
  104.         return $redirectUrl;
  105.     }
  106. }
RAW Paste Data