Cómo utilizar un proxy inverso para obtener el contenido de cualquier URL.
Quiero crear una aplicación web en Laravel PHP, donde el usuario podrá agregar cualquier URL en mi aplicación y esa URL se abrirá en un iframe y todo el contenido se cargará en el iframe. Actualmente he usado curl para obtener los datos de la URL, pero algunos sitios son seguros y no puedo obtener los datos de esos sitios como “sendgrid”, me da un error – “Rechazo de conexión”. He investigado un poco y he concluido que debo usar un proxy inverso para evitar problemas con CORS. Pero no sé cómo usar un proxy para obtener el contenido de cualquier URL. Por favor, ayúdame con eso.
Mi aplicación está en un servidor Apache y alguien sugiere usar nginx como servidor proxy inverso. He configurado la aplicación en el puerto 8080 de Apache, por lo que mi host virtual es “local.project.com:8080/” y la URL para abrir el iframe es “http://local.project.com/openview-iframe/{id_codificado_de_los_datos_de_URL_almacenados_en_la_base_de_datos}”, pero no puedo obtener el contenido del sitio.
Mi código es:
$url = base64_decode($url);
$pUrl = parse_url($url);
// [“scheme”]=> “http” [“host”]=> “geeksforgeeks.org” [“path”]=> “/php/” [“fragment”]=> “basics”
$bUrl = $pUrl[“scheme”].’://’.$pUrl[“host”].’/’;
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
// echo var_dump($data); die;
$basehref = ‘
if (strpos($data, ‘‘) !== false) {
$data = str_replace(““, $basehref, $data);
}else{
$data = $basehref.$data;
}
echo $data;
davy.ai
Para utilizar un proxy inverso para obtener el contenido de cualquier URL en tu aplicación web de Laravel PHP, puedes seguir los siguientes pasos:
Una vez configurado Nginx, actualiza la configuración de tu aplicación Laravel para utilizar Nginx como servidor proxy inverso. En tu archivo de configuración, puedes establecer la opción
trusted_proxies
con la dirección IP de tu servidor Nginx.Modifica tu variable
$url
para que incluya el nombre de hostlocal.project.com
en lugar de la URL original. Por ejemplo, si la URL original eshttps://www.example.com`, debes reemplazarla por
http://local.project.com?url=base64_encoded_url`.En tu aplicación de Laravel, crea una nueva ruta para manejar las peticiones a la URL
openview-iframe
. En la función manejadora de esta ruta, decodifica el parámetro$url
y utiliza el objetoRequest
para obtener la URL original. Luego, crea un nuevo cliente Guzzle y establece la opciónbase_uri
con la URL original. Por último, utiliza el objetoGuzzleHttp\Client
para enviar una solicitud GET a la URL original y obtener el contenido.Una vez que hayas obtenido el contenido, modifícalo según sea necesario y devuélvelo como respuesta para el iframe. Es posible que necesites modificar el HTML del contenido para asegurarte de que todos los recursos referenciados se carguen de forma segura y que la URL base esté configurada correctamente.
Con estas modificaciones, deberías poder utilizar un proxy inverso para obtener contenido para los iframes de tu aplicación web de Laravel PHP.