我如何能使出站HTTP POST请求,与数据,在node.js?


当前回答

2020年更新:

我真的很喜欢phin -超轻量级的Node.js HTTP客户端

它有两种不同的用法。一个是promise (Async/Await),另一个是传统的回调样式。

安装通过:npm i phin

直接从它的README等待:

const p = require('phin')

await p({
    url: 'https://ethanent.me',
    method: 'POST',
    data: {
        hey: 'hi'
    }
})

未承诺(回调)风格:

const p = require('phin').unpromisified

p('https://ethanent.me', (err, res) => {
    if (!err) console.log(res.body)
})

截至2015年,现在有很多不同的库可以用最少的代码实现这一点。我更喜欢优雅的轻量级HTTP请求库,除非你绝对需要控制低级HTTP的东西。

Unirest就是这样一个库

要安装它,使用npm。 $ NPM安装unirest

然后是Hello, World!大家都熟悉的例子。

var unirest = require('unirest');

unirest.post('http://example.com/helloworld')
.header('Accept', 'application/json')
.send({ "Hello": "World!" })
.end(function (response) {
  console.log(response.body);
});

额外的: 很多人还建议使用请求[2]

值得注意的是,Unirest在幕后使用的是请求库。

Unirest提供了直接访问请求对象的方法。

例子:

var Request = unirest.get('http://mockbin.com/request');

其他回答

您可以使用请求库。https://www.npmjs.com/package/request

var request = require('request');

要发布JSON数据:

var myJSONObject = { ... };
request({
    url: "http://josiahchoi.com/myjson",
    method: "POST",
    json: true,   // <--Very important!!!
    body: myJSONObject
}, function (error, response, body){
    console.log(response);
});

要发布xml数据:

var myXMLText = '<xml>...........</xml>'
request({
    url: "http://josiahchoi.com/myjson",
    method: "POST",
    headers: {
        "content-type": "application/xml",  // <--Very important!!!
    },
    body: myXMLText
}, function (error, response, body){
    console.log(response);
});

编辑:截至2020年2月,请求已弃用。

我喜欢超级代理的简单性(https://github.com/visionmedia/superagent)。节点和浏览器上的API相同。

;(async function() {
  var response = await superagent.post('http://127.0.0.1:8125/', {age: 2})
  console.log(response)
})

还有节点获取(https://www.npmjs.com/package/node-fetch),它有一个API来匹配从浏览器获取-然而这需要手动查询字符串编码,不能自动处理内容类型,或者超级代理所做的任何其他工作。

在Node.js 18

跟节点获取包、axios和request说再见吧……现在默认情况下,全局作用域中的获取API是可用的。

const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
  const data = await res.json();
  console.log(data);
}

我们可以像在浏览器中那样发出请求。

更多信息

这是我用来发出请求的最简单的方式:使用'request'模块。

命令安装'request'模块:

$ npm install request

示例代码:

var request = require('request')

var options = {
  method: 'post',
  body: postData, // Javascript object
  json: true, // Use,If you are sending JSON data
  url: url,
  headers: {
    // Specify headers, If any
  }
}

request(options, function (err, res, body) {
  if (err) {
    console.log('Error :', err)
    return
  }
  console.log(' Body :', body)

});

你也可以使用Node.js内置的“http”模块来发出请求。

我使用Restler和Needle用于生产目的。 它们都比本地httprequest强大得多。可以使用基本的身份验证、特殊的头条目甚至上传/下载文件进行请求。

至于post/get操作,它们也比使用httprequest的原始ajax调用简单得多。

needle.post('https://my.app.com/endpoint', {foo:'bar'}, 
    function(err, resp, body){
        console.log(body);
});