Разница между почтальоном и простым запросом Http с суперагентом

Мне было интересно, в чем разница между простым запросом POST с суперагентом и запросом POST с Postman. Поскольку я пытаюсь удалить веб-сайт, поэтому я сделал почтовый запрос с Postman, и все работает нормально, я получил ожидаемый результат. Но когда я выполняю запрос POST Http с суперагентом, я получаю перенаправление 301.

Есть ли способ решить эту проблему, получив тот же результат, что и Postman?

Заранее спасибо за ваш ответ.


person Paul    schedule 02.07.2017    source источник
comment
Пол, пожалуйста, добавьте свой код к следующему вопросу на StackOverflow.   -  person galkin    schedule 02.07.2017


Ответы (4)


Вы должны использовать redirects. Простой пример:

const request = require('superagent');
const url = 'localhost:3000/example';
request
.post(url)
.send({msg: "hello"})
.redirects(1) //Add redirect functionality
.on('redirect', function(res) {
  console.log('Redirected');
})
.end(function(err, res){
  console.log(res);
})
person galkin    schedule 02.07.2017

Я не знаю наизусть, но похоже, что почтальон следит за номером 301 (переехал навсегда), а ваш суперагент — нет. 301 — это ответ перенаправления. См. подробности.

Обычно вы должны обрабатывать ответы 301 в своем коде. В ответ вы найдете перенаправленный URL.

person Volem    schedule 02.07.2017

в почтальоне, если он получил ответ HTTP 301, он будет автоматически перенаправлен, если вы не видите ответа 301, и вы получите фактический ответ после перенаправления, но в суперагенте он не будет автоматически перенаправлять, и вы увидите 301 в ответ.

вы можете включить перехватчик, чтобы отключить автоматическое перенаправление в почтальоне.

большинство веб-сайтов используют этот заголовок, чтобы сказать браузеру, что он должен перенаправить, например, на какой-либо веб-сайт, если вы вызываете http://target.com он получает ответ 301 и перенаправляет на https://target.com

person Ebrahim Poursadeqi    schedule 02.07.2017

Спасибо, ребята, за ваши ответы, возможно, я нашел свою проблему: на самом деле сервер ждет формат application/x-www-form-urlencoded. введите здесь описание изображения

Как я могу перевести это в HTTP-запрос суперагента? Я старался :

postData() {
    return new Promise((resolve, reject) => {
    request
            .post(this.url)
            .send('destinations={"1": "testa"}')
            .send('stopId=2643')
            .send('lineId=1150')
            .send('sens=2')
            .end((err, res) => {
            if (err) reject(err);
            resolve(res)
        })
    })
}

Хорошо, я нашел решение, для других людей я публикую это выше:

request
        .post(this.url)
        .set('Content-Type', 'application/x-www-form-urlencoded')
        .send({destinations: '{"1":"test"}'})
        .send({stopId: "2643"})
        .send({lineId: "1150"})
        .send({sens: "2"})
        .end(function(err, res){
         console.log(res);
      })
person Paul    schedule 02.07.2017