Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

666
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda