curl:从发布路线重定向到路线

时间:2019-01-27 12:38:28

标签: express curl

我有一个Express应用,我希望能够将发布请求重定向到获取请求。

这是应用程序:

const express = require('express');

const app = express();

app.get('/get-route', function(req, res, next){
    res.redirect('/');
});

app.post('/post-route', function(req, res, next){
    res.redirect('/');
});

app.get('/', function(req, res, next){
    res.send('Home Page!\n');
}); 

app.listen(3001);

这是我的curl结果:

steve@Dell ~ $ curl http://localhost:3001/
Home Page!
steve@Dell ~ $ curl -L http://localhost:3001/get-route
Home Page!

在下面的curl请求中,它表示正在重定向到/,但我不明白为什么它不显示Home Page!消息。

steve@Dell ~ $ curl -X POST http://localhost:3001/post-route
Found. Redirecting to /

我认为-L选项可能有效,但是会出现错误:

steve@Dell ~ $ curl -L -X POST http://localhost:3001/post-route
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>

了解如何使用curl将我的发帖请求重定向到get请求真是太棒了。

自从首先问这个问题以来,我注意到我可以使用HTTPie获得想要的东西:

steve@Dell ~ $ http --form --follow POST localhost:3001/post-route
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 11
Content-Type: text/html; charset=utf-8
Date: Sun, 27 Jan 2019 18:03:14 GMT
ETag: W/"b-OVE2GcFhwNv2PpVDFXfoBIbNry4"
X-Powered-By: Express

Home Page!

如果可能的话,我仍然希望能够使用curl。

1 个答案:

答案 0 :(得分:1)

因此,在上面的原始代码中,您未指定状态代码以及从帖子到获取路线的重定向。 Express将发送默认状态代码302,这意味着浏览器将获取新的位置“ /”和GET方法。一切都应该很好...

除了使用curl的-X选项时,您无意中告诉curl使用指定的原始方法向该路由发出所有请求(包括重定向)。

因此curl会重新获得重定向位置和正确的方法,但随后会尝试按照您的说明将POST到GET路由。使用-X选项是对具有特定可用解决方案的问题的一般强制解决方案。

为链接回答下面在这种情况下,你会想使用 卷曲的-d选项,因为这是为发送带有卷曲POST请求的预期途径之一。

curl uses POST for all requests after redirect

TLDR: curl -L -d POST http://localhost:3001/post-route应该可以工作。