我想在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
答案 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。