在Node.JS上使用request模块发送POST数据

152

这个模块是“request”,链接为https://github.com/mikeal/request

我认为我已经按照每一步进行了,但是我缺少一个参数..

var request = require('request');
request.post({
        url: 'http://localhost/test2.php',
         body: "mes=heydude"
         }, function(error, response, body){
            console.log(body);
    });

另一方面,我有

echo $_POST['mes'];

我知道PHP没有问题...


为什么不直接使用 http.request?我有一种感觉,请求体不会像那样映射到查询字符串参数。尝试 url: 'http://localhost/test2.php?mes=heydude' - Raynos
在 Node.js 18 中,默认情况下全局范围内可用 fetch API。 - Abolfazl Roshanzamir
8个回答

218

编辑:你应该查看Needle。它可以为您执行此操作并支持多部分数据以及更多功能。

我发现我漏掉了一个头文件。

var request = require('request');
request.post({
  headers: {'content-type' : 'application/x-www-form-urlencoded'},
  url:     'http://localhost/test2.php',
  body:    "mes=heydude"
}, function(error, response, body){
  console.log(body);
});

9
如果你发送的是'content-type': 'application/json',记得对数据进行JSON.stringify处理。 - Derek Soike

82

使用request进行HTTP POST时,您可以通过以下方式添加参数:

var request = require('request');
request.post({
  url:     'http://localhost/test2.php',
  form:    { mes: "heydude" }
}, function(error, response, body){
  console.log(body);
});

52

我需要在没有表单的情况下发布键值对,可以像下面这样轻松完成:

var request = require('request');

request({
  url: 'http://localhost/test2.php',
  method: 'POST',
  json: {mes: 'heydude'}
}, function(error, response, body){
  console.log(body);
});

45

如果您要发布一个JSON body,请不要使用form参数。使用form会将数组处理成field[0].attributefield[1].attribute等形式。相反,请像这样使用body

var jsonDataObj = {'mes': 'hey dude', 'yo': ['im here', 'and here']};
request.post({
    url: 'https://api.site.com',
    body: jsonDataObj,
    json: true
  }, function(error, response, body){
  console.log(body);
});

"jsonDataObj" 必须被字符串化 (JSON.stringify(...)),否则会崩溃。 - Doctor
事实上,如果你对它进行字符串化,我的会崩溃。这可能取决于接收服务器的设置。 - Andrew
1
谢谢你的回答。我在哪里可以找到这个文档?因为我对POST方法有疑问,但是Github上的文档并不能很好地解决这个问题。 - Sky

16
var request = require('request');
request.post('http://localhost/test2.php', 
    {form:{ mes: "heydude" }}, 
    function(error, response, body){
        console.log(body);
});

13
  1. 使用npm install request安装请求模块。

  2. 在代码中:

    var request = require('request');
    var data = '{ "request" : "msg", "data:" {"key1":' + Var1 + ', "key2":' + Var2 + '}}';
    var json_obj = JSON.parse(data);
    request.post({
        headers: {'content-type': 'application/json'},
        url: 'http://localhost/PhpPage.php',
        form: json_obj
    }, function(error, response, body){
      console.log(body)
    });
    

除了 JSON 字符串中的错误外,这个对我很有用!请注意,“form” 部分有一个对象传递给它,因此您可以将其中的所有内容定义为对象,并且不需要进行准备工作。 - rgbflawed

4

我需要从PHP代码的POST方法中获取数据。以下是对我有用的方法:

const querystring = require('querystring');
const request = require('request');

const link = 'http://your-website-link.com/sample.php';
let params = { 'A': 'a', 'B': 'b' };

params = querystring.stringify(params); // changing into querystring eg 'A=a&B=b'

request.post({
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, // important to interect with PHP
  url: link,
  body: params,
}, function(error, response, body){
  console.log(body);
});

-3

我强烈推荐使用axios https://www.npmjs.com/package/axios,可以通过npm或yarn进行安装

const axios = require('axios');

axios.get('http://your_server/your_script.php')
    .then( response => {
    console.log('Respuesta', response.data);
    })
    .catch( response => {
        console.log('Error', response);
    })
    .finally( () => {
        console.log('Finalmente...');
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接