Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

655
Views
¿Cómo obtener una URL como parámetro en Node.js?

CÓDIGO:

 app.get("/:url", function(req,res) { var url = req.params.url; res.send(url); });

PROBLEMA:

Esto no funciona.

Si intento:

 http://localhost:3000/https://www.google.com

Yo obtengo:

 Cannot GET /https://www.google.com
about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puedes probar esto, usando una expresión regular:

 var app = require('express')(); app.get(/^\/(.*)/, function (req, res) { var url = req.params[0]; res.send(url); }); app.listen(3000, () => console.log('Listening on 3000'));

Cuando corres:

 curl http://localhost:3000/https://www.google.com

el servidor debe devolver:

 https://www.google.com

Actualizar

Existe cierta controversia sobre si los dos puntos son legales o no en las URL.

Vea esta pregunta para más detalles:

  • ¿Se permiten dos puntos en las URL?

Según RFC 3986, esta es una URL legal:

 http://localhost:3000/https://tools.ietf.org/html/rfc3986

Pero tenga en cuenta que si bien esto también es legal:

 http://localhost:3000/https://tools.ietf.org/html/rfc3986#section-3.3

si ingresó esa URL en el navegador, su servidor solo obtendría:

 /https://tools.ietf.org/html/rfc3986

en la solicitud. Por esa razón, aunque no es estrictamente necesario, aún recomendaría codificar la URL que coloca en otras URL; consulte la respuesta de Zac Delventhal .

Experimento

Usando el ejemplo de código anterior, este comando:

 curl http://localhost:3000/https://www.google.com/

saldrá esto:

 https://www.google.com/

Pero este comando:

 curl 'http://localhost:3000/https://www.google.com/#fragment'

saldrá esto:

 https://www.google.com/

Tenga en cuenta que usé comillas simples arriba no porque sean necesarias aquí; no lo son, vea esto:

 echo http://localhost:3000/https://www.google.com/#fragment

pero para mostrar que el fragmento hash no desaparece porque el shell lo trata como un comentario en caso de que alguien pensara que esa podría ser la razón. No se envía incluso cuando se usan las comillas, y lo que sucede se puede demostrar con el -v de curl :

 * Connected to localhost (127.0.0.1) port 3000 (#0) > GET /https://www.google.com/ HTTP/1.1 > User-Agent: curl/7.35.0 > Host: localhost:3000 > Accept: */*

Como puede ver, el fragmento hash ni siquiera se envía con HTTP, por lo que es imposible que su servidor sepa que existió.

Por cierto, esto también demuestra que el uso de URL no codificadas dentro de otras URL no estropearía ningún proxy, porque las solicitudes HTTP a los servidores proxy envían esto:

 GET https://www.google.com/ HTTP/1.1

y no esto:

 GET /https://www.google.com/ HTTP/1.1

por lo que no se pueden confundir. (Observe la barra oblicua).

about 4 years ago · Santiago Trujillo Report

0

Esto se debe a que : y / son caracteres especiales que se utilizan para construir una URL. En otras palabras, no son seguros para URL . Si desea enviar esos caracteres como parte de una ruta URL, utilizando el analizador de parámetros Express predeterminado, debe codificarlos en porcentaje .

Prueba esto con tu código existente:

 curl http://localhost:3000/https%3A%2F%2Fwww.google.com

Deberías volver:

 https://www.google.com

Otra opción sería usar un parámetro de consulta en lugar de una variable de ruta. Modifique su fragmento de código ligeramente a esto:

 app.get("*", function(req, res) { var url = req.query.url; res.send(url); });

Luego, puedes probarlo con este comando:

 curl http://localhost:3000?url=https://www.google.com

Y deberías volver:

 https://www.google.com

Aunque diría que probablemente sea una buena idea codificar en porcentaje esos caracteres, aunque Express puede analizarlos bien de esta manera. Potencialmente podría conducir a un comportamiento extraño en el futuro.

Otra opción más sería enviar la url como una cadena en el cuerpo de una solicitud POST , pero eso puede no ser RESTful dependiendo de su caso de uso.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!