curl: перенаправить с почтового маршрута, чтобы получить маршрут - PullRequest
0 голосов
/ 27 января 2019

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

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

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 может работать, но это дает ошибку:

<code>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 /

Было бы здорово иметь представление о том, как я могу перенаправить свой запрос на публикацию взапрос get с использованием 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, еслиможно сделать это.

1 Ответ

0 голосов
/ 29 января 2019

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...