verificar redirecionamento para ecurtadores de url de redes sociais

This commit is contained in:
Renan Bernordi 2024-12-02 17:47:52 -03:00
parent 44c301dca8
commit a51e309196
2 changed files with 46 additions and 3 deletions

View file

@ -54,6 +54,39 @@ class URLAnalyzer
$this->cache = new Cache();
}
/**
* Verifica se uma URL tem redirecionamentos e retorna a URL final
*
* @param string $url URL para verificar redirecionamentos
* @return array Array com a URL final e se houve redirecionamento
*/
public function checkRedirects($url)
{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_NOBODY => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 5,
CURLOPT_TIMEOUT => 5,
CURLOPT_USERAGENT => $this->userAgents[array_rand($this->userAgents)]['user_agent'],
CURLOPT_SSL_VERIFYPEER => false
]);
$response = curl_exec($ch);
$finalUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return [
'finalUrl' => $finalUrl,
'hasRedirect' => ($finalUrl !== $url),
'httpCode' => $httpCode
];
}
/**
* Registra erros no arquivo de log
*
@ -182,8 +215,8 @@ class URLAnalyzer
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 5,
CURLOPT_TIMEOUT => 30,
CURLOPT_MAXREDIRS => 2,
CURLOPT_TIMEOUT => 10,
CURLOPT_ENCODING => '',
CURLOPT_USERAGENT => $userAgent,
CURLOPT_SSL_VERIFYPEER => false,
@ -263,7 +296,6 @@ class URLAnalyzer
*/
private function cleanUrl($url)
{
$url = strtolower($url);
$url = trim($url);
// Detecta e converte URLs AMP

View file

@ -28,6 +28,17 @@ if (strpos($path, $prefix) === 0) {
if (filter_var($url, FILTER_VALIDATE_URL)) {
$analyzer = new URLAnalyzer();
try {
// Verifica se há redirecionamentos
$redirectInfo = $analyzer->checkRedirects($url);
// Se houver redirecionamento e a URL final for diferente
if ($redirectInfo['hasRedirect'] && $redirectInfo['finalUrl'] !== $url) {
// Redireciona para a URL final
header('Location: ' . SITE_URL . '/p/' . urlencode($redirectInfo['finalUrl']));
exit;
}
// Se não houver redirecionamento ou se já estiver na URL final
// Tenta analisar e processar a URL
$content = $analyzer->analyze($url);
// Exibe o conteúdo processado