curl相当于nodejs?

我正在寻找使用nodejs从HTTP请求(即调用远程Web服务,并响应客户端)使用信息。

在PHP中,我会用curl来做到这一点。 节点中的最佳做法是什么?

有关完整的示例,请参阅HTTP模块的文档:

http://nodejs.org/docs/v0.5.2/api/http.html#http.request

您用来运行服务器的http模块也用于发出远程请求。

以下是他们的文档中的示例:

 var http = require("http"); var options = { host: '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(); 

由于看起来像node-curl是死的,我已经分叉它,重新命名,并修改为更curl像在Windows下编译。

node-libcurl

用法示例:

 var Curl = require( 'node-libcurl' ).Curl; var curl = new Curl(); curl.setOpt( Curl.option.URL, 'www.google.com' ); curl.setOpt( 'FOLLOWLOCATION', true ); curl.on( 'end', function( statusCode, body, headers ) { console.info( statusCode ); console.info( '---' ); console.info( body.length ); console.info( '---' ); console.info( headers ); console.info( '---' ); console.info( this.getInfo( Curl.info.TOTAL_TIME ) ); this.close(); }); curl.on( 'error', function( err, curlErrorCode ) { console.error( err.message ); console.error( '---' ); console.error( curlErrorCode ); this.close(); }); curl.perform(); 

执行是asynchronous的, 并且目前没有办法同步使用它(并且可能永远不会)。

它仍然是阿尔法,但是这将会很快改变,帮助表示赞赏。

现在可以直接使用Easy处理同步请求,例如:

 var Easy = require( 'node-libcurl' ).Easy, Curl = require( 'node-libcurl' ).Curl, url = process.argv[2] || 'http://www.google.com', ret, ch; ch = new Easy(); ch.setOpt( Curl.option.URL, url ); ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) { console.log( buf ); return size * nmemb; }); ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) { console.log( arguments ); return size * nmemb; }); // this call is sync! ret = ch.perform(); ch.close(); console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) ); 

另外,这个项目现在是稳定的!

您可以轻松使用请求模块:

https://www.npmjs.com/package/request

示例代码:

 var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Show the HTML for the Google homepage. } else { console.log("Error "+response.statusCode) } }) 

我通常使用REQUEST,它是Node.js的一个简化但function强大的HTTP客户端

https://github.com/request/request

它在NPM npm install request

这是一个使用示例:

 var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Show the HTML for the Google homepage. } }) 

上面的例子可以工作,但是并没有真正处理一个真实世界的例子(例如,当你处理多个数据块的时候,你需要确保的一件事是你有一个'on chunk'处理程序将数据推送到一个数组(在JS中是最快的方法)和一个“结束”处理程序,它们将它们连接在一起,以便返回。

当你处理大量的请求(5000多行),服务器向你发送大量数据时,这是特别必要的。

下面是我的一个程序(coffeescript)中的一个例子: https ://gist.github.com/1105888

以及如果你真的需要一个curl等价物,你可以尝试node-curl

 npm install node-curl 

你可能需要添加libcurl4-gnutls-dev

npm模块可以像请求一样curl, npm curlrequest

步骤1: $npm i -S curlrequest

第2步:在你的节点文件中

 let curl = require('curlrequest') let options = {} // url, method, data, timeout,data, etc can be passed as options curl.request(options,(err,response)=>{ // err is the error returned from the api // response contains the data returned from the api }) 

为了进一步阅读和理解, npm curlrequest

我结束了使用grunt-shell库。

这是我完全实现的Grunt任务的源代码,任何想用EdgeCast API工作的人都可以。 你会发现在我的例子中,我使用grunt-shell来执行清除CDN的curl命令。

这是我花了几个小时试图获得一个HTTP请求在Node中工作后结束了。 我能够在Ruby和Python中工作,但没有达到这个项目的要求。

使用reqclient ,它是一个小的客户端模块,允许您使用cURL风格 (可选,用于开发环境) logging所有活动 。 也有很好的function,如URL和参数parsing,身份validation集成,caching支持等。

例如,如果您创build一个客户端对象,请执行一个请求:

 var RequestClient = require("reqclient").RequestClient; var client = new RequestClient({ baseUrl:"http://baseurl.com/api/v1.1", debugRequest:true, debugResponse:true }); var resp = client.post("client/orders", {"client":1234,"ref_id":"A987"}, {headers: {"x-token":"AFF01XX"}}) 

它将在控制台内login如下所示:

 [Requesting client/orders]-> -X POST http://baseurl.com/api/v1.1/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json [Response client/orders]<- Status 200 - {"orderId": 1320934} 

该请求将返回一个Promise对象,所以你必须处理, then catch如何处理结果。

reqclientnpm一起提供 ,你可以安装模块: npm install reqclient

你可能想尝试使用这样的东西

 curl = require('node-curl'); curl('www.google.com', function(err) { console.info(this.status); console.info('-----'); console.info(this.body); console.info('-----'); console.info(this.info('SIZE_DOWNLOAD')); }); 

您可以尝试使用POSTMAN Chrome应用程序处理您的请求,并可以从中生成节点js代码

我有一个问题从IOT RaspberryPi发送POST数据到云数据库,但几小时后,我设法得到它。

我使用命令提示符来执行此操作。

 sudo curl --URL http://<username>.cloudant.com/<database_name> --user <api_key>:<pass_key> -X POST -H "Content-Type:application/json" --data '{"id":"123","type":"987"}' 

命令提示符将显示问题 – 错误的用户名/密码; 不良要求等

–URL数据库/服务器位置(我使用简单的免费的Cloudant DB)–user是authentication部分用户名:pass我通过APIinput进入-X定义要调用的命令(PUT,GET,POST,DELETE)-H内容types – Cloudant是关于使用JSON的文档数据库 – 数据内容本身按JSONsorting