Nodejs http request post怎么带参数

Nodejs http request post怎么带参数

我想通过http.request();提交一个post到主机上,但是我的post是带有参数的,我该怎么设置参数尼? 我看了官方的例子:

var options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST'
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

但是这个例子里面没有带参数的,如果是get的话直接拼接header,可是post该怎么处理传递参数??


6 回复

当然可以。在 Node.js 中使用 http.request 发送 POST 请求时,可以通过请求体(request body)来传递参数。下面是一个示例代码,展示了如何通过 POST 请求发送带有参数的数据。

示例代码

const http = require('http');

// 设置请求选项
const options = {
  hostname: 'example.com',
  port: 80,
  path: '/submit',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json', // 设置请求头
    'Content-Length': Buffer.byteLength(body) // 设置请求体长度
  }
};

// 创建 POST 请求
const req = http.request(options, (res) => {
  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('end', () => {
    console.log('Response received:', data);
  });
});

req.on('error', (e) => {
  console.error(`Problem with request: ${e.message}`);
});

// 定义请求体数据
const body = JSON.stringify({
  param1: 'value1',
  param2: 'value2'
});

// 将数据写入请求体
req.write(body);

// 结束请求
req.end();

解释

  1. 设置请求选项

    • hostnameport 指定目标服务器。
    • path 是请求的路径。
    • method 设为 'POST' 表明这是一个 POST 请求。
    • headers 中设置了 'Content-Type''application/json',表明请求体中的数据是 JSON 格式。同时,设置了 'Content-Length' 来指定请求体的长度。
  2. 创建 POST 请求

    • 使用 http.request(options, callback) 方法创建一个 POST 请求对象。
  3. 处理响应

    • 监听 data 事件以接收响应数据片段,并将其累积到变量 data 中。
    • 监听 end 事件以在接收完所有数据后执行操作,例如打印响应内容。
  4. 错误处理

    • 监听 error 事件以捕获并处理请求过程中可能出现的任何错误。
  5. 定义请求体数据

    • 使用 JSON.stringify() 方法将对象转换为 JSON 字符串。
  6. 写入请求体

    • 使用 req.write(body) 将请求体数据写入请求。
  7. 结束请求

    • 调用 req.end() 结束请求。

这样,你就可以通过 POST 请求向服务器发送带有参数的数据了。


虽然我也新手,但post怎么是带参数呢。get和post的区别搞清楚,node里,post好像是可以用一个中间件来解析,否则你拿不到post的数据。 http.request为http的客户端请求方式,上面的options指定提交方式为post.

HEADER 带参数, 看稍微复杂点的例子 http://stackoverflow.com/a/6158966/883571

这次SB了,提过问题之后才想到在坛子里看看,坛子里面已经有人问过这个问题了,然后想删除这个帖子,结果二位的回复速度太快了,这里表示很感谢。虽然坛子里面有问过,但是你的这个http://stackoverflow.com/a/6158966/883571还是对我受益匪浅啊!感谢

用社区的request模块好用点

要在 Node.js 的 http.request 方法中通过 POST 请求发送带有参数的数据,你可以使用请求体(request body)来传递这些参数。以下是一个具体的示例代码,展示了如何实现这一点:

const http = require('http');

const options = {
  hostname: 'www.example.com',
  port: 80,
  path: '/submit',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
};

const req = http.request(options, (res) => {
  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('end', () => {
    console.log('Response received:', data);
  });
});

req.on('error', (error) => {
  console.error('Problem with request:', error.message);
});

// 设置请求体,这里是你的参数
const postData = querystring.stringify({
  param1: 'value1',
  param2: 'value2',
});

// 将数据写入请求体
req.write(postData);

// 结束请求
req.end();

在这个示例中,我们首先导入了 http 模块,并设置了请求选项(如 hostname, port, path, 和 method)。然后,我们在请求头(headers)中指定了 Content-Typeapplication/x-www-form-urlencoded,这表示我们将以 URL 编码格式发送数据。

接着,我们使用 querystring.stringify() 方法将参数对象转换成 URL 编码的字符串形式。最后,我们使用 req.write() 方法将数据写入请求体,并调用 req.end() 来结束请求。

这种方法可以让你通过 POST 请求向服务器传递参数。如果你需要传递更复杂的数据结构(例如 JSON 对象),只需要更改 Content-Type 并适当调整编码方式即可。

回到顶部