手机版

Node.js中请求模块处理超文本传送协议协议请求的基本使用教程

时间:2021-11-05 来源:互联网 编辑:宝哥软件园 浏览:

这里来介绍一个Node.js的模块——请求。有了这个模块,http请求变的超简单。

201633195717393.png  (39156)

请求使用超简单,同时支持安全超文本传输协议和重定向。

var request=require(' request ');请求(“http://www.google.com”,函数(错误、响应、正文){ if(!错误响应。statuscode==200){控制台。日志(正文)//打印谷歌首页}})流:

任何响应都可以输出到文件流。

请求(' http://gogle。com/嘟嘟。png ').管道(fs。createwritestream(' doodle。png ')反过来,也可以将文件传给放或邮政请求。未提供页眉的情况下,会检测文件后缀名,在放请求中设置相应的内容类型。

fs.createReadStream('file.json ').管道(请求。put(' http://mysite。com/obj。JSON’)请求也可以管给自己。这种情况下会保留原内容类型和内容长度。

请求。get(' http://gogle。com/img。png ').管道(请求。put(' http://mysite。com/img。png ')表单:

请求支持应用程序/x-www-form-urlencoded和多部分/表单数据实现表单上传。

默认值很简单:

请求。post(' http://服务。com/upload ',{form:{key:'value'}})或者:

请求。post(' http://服务。com/upload ').表单({key:'value'})使用多部分/表单数据不用操心设置页眉之类的琐事,请求会帮你解决。

var r=请求。post(' http://服务。com/upload ')var form=r . form()认证:

请求。得到(' http://一些。服务器。com/').“auth(”用户名','密码,假);或

请求。得到(' http://一些。服务器。com/',{ ' auth ' : { ' user ' : ' username ',' pass': 'password ',' send immediate ' : false } });立即发送,默认为真,发送一个基本的认证标题。设为错误的之后,收到401会重试(服务器的401响应必须包含万维网-认证指定认证方法)。

立即发送为真时支持摘要认证。

OAuth登录:

//Twitter oauthwar QS=require('查询字符串'),oauth={ callback : ' http://my site。com/callback/',consumer_key: CONSUMER_KEY,CONSUMER _ SECRET : CONSUMER _ SECRET },URL='https://api.twitter.com/oauth/request_token';request.post({url:url,oauth:oauth},function (e,r,body) { //理想情况下,您将在响应中采用body//,并构造一个用户单击的url(如登录按钮)。//只有在用户通过推特验证他们正在授权您的应用程序后,验证器才在响应中可用var access_token=qs.parse(body),oauth={ CONSUMER _ KEY : CONSUMER _ KEY,CONSUMER _ SECRET : CONSUMER _ SECRET,token : access _ token。oauth _ token,验证器: access _ token。oauth _ verifier },URL=' https://API。推特。com/oauth/access _ token ';request.post({url:url,oauth:oauth},function (e,r,body){ var perm _ token=QS。parse(body),oauth={ CONSUMER _ KEY : CONSUMER _ KEY,CONSUMER _ SECRET 3360 CONSUMER _ SECRET,token 3360 perm _ token。oauth _ token },URL=' https://API。推特。com/1/users/token,params={ screen _ name : perm _ token。screen _ name,user _ id : perm _ token。user _ id };网址=QS。stringify(params)请求。get({ URL : URL,oauth:oauth,json:true },函数(e,r,user) {console.log(user)})})定制超文本传送协议头

用户代理之类可以在选择对象中设置。在下面的例子中,我们调用github API找出某仓库的收藏数和派生数。我们使用了定制的用户代理和https .

var request=require(' request ');var options={ URL : ' https://API . github.com/repos/mikeal/request ',header RS : { ' User-Agent ' : ' request ' } };函数回调(错误、响应、正文){ if(!错误响应. statuscode==200){ var info=JSON . parse(body);console . log(info . stargazers _ count ' Stars ');console . log(info . Forks _ count ' Forks ');} }请求(选项,回调);饼干:

Cookies默认情况下是禁用的。在默认值或选项中将jar设置为true,这样所有后续请求都将使用cookie。

request=request . defaults({ jar : true })request(' http://www . Google.com ',function(){ request(' http://images . Google.com ')})通过创建request.jar()的新实例,可以使用自定义cookie来代替request global的cookie jar。

var j=request . jar()var request=request . defaults({ jar :j })request(' http://www . Google.com ',function(){ request(' http://images . Google.com ')})或。

var j=request . jar()var Cookie=request . Cookie(' your _ Cookie _ here ')j . setCookie(Cookie,uri,function (err,Cookie){ })request({ URL : ' http://www . Google.com ',jar:j},function(){ request(' http://images . Google.com ')})注意,setCookie至少需要三个参数,最后一个是回调函数。

您可以使用请求管道方法轻松获得图片文件流。

var request=require('request '),fs=require(' fs ');请求(' https://www . Google.com . hk/images/srpr/logo 3w . png ')。pipe(fs . createwritestream(' doodle . png '));更多说明,请点击这里继续阅读:https://github.com/mikeal/request/.

例子

这里有一个很简单的例子,用来抓取Qunar.com的酒店查询数据(获取某段时间内各房型的价格排名):

var request=require('request '),fs=require(' fs ');var req URL=' http://hotel . qunar.com/price/detail . JSP?from date=2012-08-18 they=2012-08-19 city URL=Shanghai _ city hotelseq=Shanghai _ city _ 2856 cn=5 ';请求({uri:reqUrl},函数(err,response,body){//console . log(response . statuscode);//console.log(响应);//如果数据量比较大,需要根据日期和酒店ID存储返回的数据。如果获得数据并进行比较,直接读取文件var file path=_ _ dir name '/data/data . js '即可。if(fs . exists(file path)){ fs . unlink sync(file path);console.log('Del文件' Filepath);} fs.writeFile(filePath,body,' utf8 ',function(err){ if(err){ throw err;} console . log(' Save ' file path ' ok ~ ');});console . log(' Fetch ' req URL ' ok ~ ');});

这个例子来自一位酒店业务的朋友,他想知道他在网站上向客户提供的价格的竞争力:

1.如果提供的价格太低,你赚的钱会更少,所以如果你的价格是最低的,你需要看第二低的,然后决定是否调整;

2.如果开出的价格太高,搜索出来的排名结果会比较低,没有顾客会订酒店,这样生意就没了。

因为酒店预订服务很多,比如2000多,靠人力逐个查询排名相对被动,很难做大。所以我对这个需求的分析是可行的,可以做成一个很好的实时预警系统(当然数据会每5~10分钟在页面上自动刷新一次)。只有这样,才能实现利润最大化,提高销售和客户部门的工作效率,加快酒店的合作数量和公司人员的扩充:

1.不亏钱,不亏本买卖;

2.如果发现报价过低或过高,需要支持调用平台的api接口,直接修改价格;

3.具有自动生成分析报告的功能,分析竞争对手调价策略的变化;

版权声明:Node.js中请求模块处理超文本传送协议协议请求的基本使用教程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。