curl相当于nodejs?
我正在寻找使用nodejs从HTTP请求(即调用远程Web服务,并响应客户端)使用信息。
在PHP中,我会用curl来做到这一点。 节点中的最佳做法是什么?
有关完整的示例,请参阅HTTP模块的文档:
您用来运行服务器的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
举个例子https://github.com/joyent/node/wiki/modules#wiki-tcp 。 一个非常快速的总结=>
以及如果你真的需要一个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
如何处理结果。
reqclient
与npm一起提供 ,你可以安装模块: 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