Problema con creación de webproxy con nodejs

Iniciado por Diesan Romero, 26 Agosto 2018, 02:07 AM

0 Miembros y 1 Visitante están viendo este tema.

Diesan Romero

Estoy creando un web proxy con nodejs y tengo un problema. Este es el index de la vista:

Código (html4strict) [Seleccionar]
    <!DOCTYPE html>
    <html lang="en" dir="ltr">
      <head>
        <meta charset="utf-8">
       
        <title>Hola</title>
      </head>
      <body>
        <div class="container mt-5">
          <div class="row mt-5">
            <div class="mx-auto mt-5">
              <div class="form-group">
                <form class="" method="get" action="./">
                  <input type="text" class="form-control" id="url" placeholder="www.example.com" name="url">
                </form>
              </div>
            </div>
          </div>
        </div>
      </body>
    </html>

y este es el archivo del servidor:

Código (javascript) [Seleccionar]
    const http = require("http");
    const url = require("url");
    const request = require("request");
    const fs = require('fs')
    var server = http.createServer(onRequest);
   
    function onRequest(req, res) {
      var queryData = url.parse(req.url, true).query;
      if (queryData.url) {
        request({ url: "http://"+ queryData.url })
          .on("error", function(e) {
            res.end(e);
          })
          .pipe(res);
      } else {
        fs.readFile("index.html", (err, html) => {
          if (err) {
            console.log(err)
          }
          else {
            res.write(html);
            res.end();
          }
        });
      }
    }
   
    server.listen(80);

Todo funciona casi a la perfección, pues yo envío los datos por formulario y todo bien. El me carga la página perfectamente, por ejemplo www.google.com, me deja navegar entre páginas y todo, pero una vez dentro de ella que intento hacer una búsqueda en Google por ejemplo, me devuelve al index de la vista y no me hace la búsqueda, entonces me redirecciona a un link como este: http://localhost/search?ie=ISO-8859-1&hl=en&source=hp&biw=&bih=&q=temas&btnG=Google+Search&gbv=2 y en el servidor que tengo en linux me pasa lo mismo, solo que en vez de localhost me aparece el nombre del dominio que tengo anclado ahí al servidor. Cuando intento acceder a Twitter o a cualquier página que contenga un login para entrar a mi cuenta, pues me saca del proxy y me envía a la página normal ¿Alguno tiene idea de que estoy haciendo mal?

#!drvy

Los enlaces que clickeas o los action que activas, llevan su "propia url" o en su defecto llevan una url relativa. Cuando recojas el contenido, reemplaza el dominio al que haces de proxy, por el tuyo propio.

Saludos

Diesan Romero

Cita de: #!drvy en 26 Agosto 2018, 02:13 AM
Los enlaces que clickeas o los action que activas, llevan su "propia url" o en su defecto llevan una url relativa. Cuando recojas el contenido, reemplaza el dominio al que haces de proxy, por el tuyo propio.

Saludos

No entendí nada. En realidad yo no se nada de proxy, este es una necesidad que me he sentido obligado a crear por así decirlo.

#!drvy

#3
Supongamos que quieres hacer proxy, haces el proxy y le dices que te retorne lo que tiene google.com. El proxy va y te retorna lo que tiene google.com que es esto:

Código (html5) [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>

   <a href='http://google.com/imagenes.html'>Imagenes</a>
   <a href='acerca.html'>Acerca de nosotros</a>

   <form action='/search' method='get'>
       <input type='text' value='' placeholder='buscar' name='q'>
       <button type='submit'>Buscar!!</button>
   </form>

</body>
</html>


Tu "proxy" te devuelve la cosa tal cual, entonces cuando tu clickeas sobre "imagenes", tu navegador abre http://google.com (ruta completa), cuando clickeas sobre "Acerca de nosotros", tu navegador abre "tuproxy.com/acerca.html" (ruta relativa) y cuando buscas algo, tu navegador abre "tuproxy.com/search?q=labusqueda" (ruta relativa friendly)".

Lo que tienes que hacer, es que tu proxy, cambie eso, que cuando obtenga los contenidos de "google.com", reemplace todos los href, para que cuando clickeas sobre "Imagenes", se abra tuproxy.com/proxy?url=http://google.com/imagenes.html, para qque cuando clickeas sobre "Acerca de nosotros", tu navegador abra tuproxy.com/proxy?url=http://google.com/acerca.html y para que cuando hagas una busqueda, tu navegador abra "tuproxy.com/proxy?url=http://google.com/search?q=labusqueda".

PD: Y eso es la parte fácil, luego si quieres acciones más completas como el hecho de buscar en una pagina (y no hablemos de las sesiones y las cookies xD), tendras que emular las consultas POST enviando tu mismo el contenido a la página. Si no quieres complicarte mucho, busca algo que ya esta hecho, como esta librería..

https://github.com/nodejitsu/node-http-proxy

Saludos

Diesan Romero

Supongamos que Google, tiene un href="/imagenes/google.png" hacia su logo por así decirlo. Entonces, cuando yo doy clic en un enlace que me lleva hacia esa imagen, lo que hace es darme esta url http://miproxy.com/?url=/images/google.png y para remediar eso lo que tengo que lograr es que el href termine siendo algo así href="http://example.com/?url=/images/google.png" ¿Entendí?