Curl: перенаправление с почтового маршрута на получение маршрута

У меня есть экспресс-приложение, и я хочу иметь возможность перенаправить почтовый запрос на запрос на получение.

Вот приложение:

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

и вот мои результаты с завитком:

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.

С тех пор, как я впервые задал этот вопрос, я заметил, что могу получить то, что хочу, используя 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, если это возможно.

🤔 А знаете ли вы, что...
С ExpressJS удобно работать с шаблонами для генерации HTML-страниц.


122
1

Ответ:

Решено

Таким образом, в исходном коде выше вы не указываете код состояния с перенаправлением с сообщения на маршрут получения. Express отправит код состояния по умолчанию 302, что означает, что браузер вернет новое местоположение «/» и метод GET. Все должно быть хорошо...

За исключением случаев, когда вы используете параметр curl -X, вы непреднамеренно указываете curl выполнять все запросы к этому маршруту (включая перенаправления) с указанным исходным методом.

Таким образом, curl возвращает местоположение перенаправления и правильный метод, но затем пытается отправить POST на маршрут GET в соответствии с вашими инструкциями. Использование параметра -X является своего рода общим принудительным решением проблем, для которых доступны конкретные решения.

Как указано в приведенной ниже ссылке, в этой ситуации вы хотели бы использовать опция curl -d, поскольку это один из предполагаемых способов отправки запроса POST с помощью curl.

curl использует POST для всех запросов после перенаправления

TLDR:curl -L -d POST http://localhost:3001/post-route должен работать.