gpt4 book ai didi

javascript - 如何在 Node.js 中获取 url 作为参数?

转载 作者:行者123 更新时间:2023-11-30 09:36:29 26 4
gpt4 key购买 nike

代码:

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

问题:

这行不通。

如果我尝试:

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

我得到:

Cannot GET /https://www.google.com

最佳答案

您可以尝试使用正则表达式:

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'));

当你运行时:

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

服务器应该返回:

https://www.google.com

更新

冒号在 URL 中是否合法存在一些争议。

有关详细信息,请参阅此问题:

根据 RFC 3986,这是一个合法的 URL:

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

但请注意,虽然这也是合法的:

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

如果您在浏览器中输入该 URL,您的服务器只会得到:

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

在请求中。出于这个原因,虽然不是绝对必要,但我仍然建议对您放入其他 URL 的 URL 进行 URL 编码 - 请参阅 Zac Delventhal 的回答。

实验

使用上面的代码示例,此命令:

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

将输出这个:

https://www.google.com/

但是这个命令:

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

将输出这个:

https://www.google.com/

请注意,我在上面使用单引号并不是因为它们在这里是必需的 - 它们不是,请参阅:

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

但为了表明散列片段不会消失,因为它被 shell 视为注释,以防有人认为这可能是原因。即使使用引号也不会发送,可以使用 curl-v 开关演示发生的情况:

* 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: */*

如您所见,哈希片段甚至没有通过 HTTP 发送,因此您的服务器不可能知道它存在。

顺便说一句,这也表明在其他 URL 中使用未编码的 URL 不会弄乱任何代理,因为对代理服务器的 HTTP 请求会发送:

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

不是这个:

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

所以他们不会混淆。 (注意斜杠。)

关于javascript - 如何在 Node.js 中获取 url 作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43280893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com