Как сделать расширенный http-запрос в Node.js - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу сделать расширенный запрос в node.js.Я хочу разместить данные внутри другого запроса.В основном я хочу отправить сообщение на веб-сайт.

У меня есть этот код:

var request = require('request')                                 

request({
    method: "POST",
     baseUrl: "https://www.sitehere.com",
      uri: "/login",
form: { 
      username: "username",
     password: "password",
    autologin: "true"}},
function(err,httpResponse,body){ console.log(body); })

request({
   method: "POST",
    baseUrl: "https://www.sitehere.com",
     uri: "/postmessage",
form: { 
      message: "test"
      }
}, function(err,httpResponse,body){ console.log(body); })

, но он не работает, потому что во втором запросе я не вошел, я полагаю.Я не уверен, что это проблема, потому что оба запроса возвращают тело пустым.Но это работает (в браузере):

$.ajax("/login",{data:{
   username:"username",
    password: "password",
     autologin:"true"},
  method:"POST"}).done(postMessage()) // here somehow I get redirected no the home page

function postMessage() {
   $.ajax("/postmessage",{method:"POST",data:{message:"test"}}) 
}

Поэтому я хочу войти в систему и войти в систему, чтобы отправить сообщение.Извините за мой плохой английский.Спасибо.

Редактировать: Приведенный выше код возвращает тело как {success: true, redirectTo: "https://www.sitehere.com/"}, а мой http-запрос на отправку возвращает тело как ноль

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Вы можете попробовать использовать sync-request .

0 голосов
/ 28 декабря 2018

Вы столкнулись с первой из многих функций / проблем, которые могут затруднить использование nodejs / javascript в начале.Вы должны переместить свой второй вызов в закрытие первого, в противном случае второй будет обрабатываться (асинхронно) параллельно первому, а не ждать первого.

var request = require('request')                                 
const cookieJar = request.jar()

request({
    jar: cookieJar, 
    method: "POST",
    baseUrl: "https://www.sitehere.com",
    uri: "/login",
    form: { 
      username: "username",
      password: "password",
      autologin: "true"}
    },function(err,httpResponse,body){ 
     console.log(body); 
     request({
      jar: cookieJar, 
      method: "POST",
      baseUrl: "https://www.sitehere.com",
      uri: "/postmessage",
      form: { 
      message: "test"
      }
    }, function(err,httpResponse,body){ console.log(body); })
})

Чтобы сделатьВаша жизнь намного проще, я рекомендую вам сначала взглянуть на то, как nodejs обрабатывает асинхронность, что это означает в связи с замыканиями и как избежать ада обратного вызова, используя обещания с помощью более современного синтаксиса async / await.

Обновление: Как отметил @Brad в комментариях, вы можете также сохранить файлы cookie в запросе, поэтому я добавил банку с файлами cookie.

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