如何在Node.js中发出扩展的http请求

时间:2018-12-28 16:39:59

标签: javascript node.js http request

我想在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 post请求将正文返回为null

2 个答案:

答案 0 :(得分:1)

您遇到了很多功能/问题中的第一个,这些功能/问题一开始可能会使使用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避免使用promises进行回调地狱/ await语法。

更新:正如@Brad在评论中指出的那样,您可能还想保留请求中的cookie,这就是为什么我添加了一个cookie jar。

答案 1 :(得分:-2)

您可以尝试使用sync-request