发布请求在NodeJS中不起作用,请单击“确定”

时间:2019-08-16 21:34:54

标签: javascript node.js request axios

我正在尝试使用Axios,因为它是NodeJS唯一具有异步/等待功能的模块。

我已经在Python脚本中有一个POST请求,该请求运行得很好,并且我正在尝试适应NodeJS服务器。

但是我阻止了我的第一个帖子请求。 如果我直接与Request模块一起使用,则效果很好,请参阅我的代码:

console.log("create session");
let data = {'uname': 'login', 'pass':  'password', 'module':'NSUser', 'op':'login','url':'%2Findex.php'}
let url = 'https://localhost:9000/user.php'
let headers = {'Accept': "application/html"}

//s = request.session
body = await request.post({url:url, headers:headers, form:data}, function(error, response, body){
  console.log("LOGIN");
 console.log(response);

});

使用Axios(或Axios实例,但稍后再使用...),因为我将需要保持会话状态(就像在Python中一样,它像一个魅力一样工作)。

     const config = {
      method: 'post',
      url: 'https://localhost:9000/user.php',
      headers:  {'content-type': 'application/x-www-form-urlencoded'},
      data: {uname:'login',
        pass:'password',
        module:'NSUser',
        op:'login',
        url:'/index.php'}
     }    
    axios(config)

作为响应的主体,它不是连接页面,而是带有Request的代码。

我错了吗? 我尝试用param替换数据,但这是相同的。...

如果需要,我可以从Firefox获得CURL命令。

有关信息,在python中:

s = requests.session()
res = s.post(url, headers=headers, data=data)

和我的s变量具有会话,并且可以在连接时请求所有内容。

1 个答案:

答案 0 :(得分:0)

,您正在发送表单编码的数据:

headers:  {'content-type': 'application/x-www-form-urlencoded'},

…但是您将对象传递给Axios:

data: {uname:'login', …

...因此Axios会将其编码为JSON,而不是形式编码的数据。


请参见the documentation

  

默认情况下,axios将JavaScript对象序列化为JSON。要改为以application / x-www-form-urlencoded格式发送数据,可以使用以下选项之一。

...

  

在node.js中,您可以按以下方式使用querystring模块:

const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));