Nodejs Request使用介绍
转自:http://www.open-open.com/lib/view/open1435301679966.html
这篇就先介绍一个Node.js的模块——request。有了这个模块,http请求变的超简单。
使用超简单
Request使用超简单,同时支持https和重定向。
var request = require('request'); request('http://www.google.com', function (error, response, body) {if (!error && response.statusCode == 200) {console.log(body) // 打印google首页 } })
流
任何响应都可以输出到文件流。
request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
反过来,也可以将文件传给PUT或POST请求。未提供header的情况下,会检测文件后缀名,在PUT请求中设置相应的content-type。
fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))
请求也可以pipe给自己。这种情况下会保留原content-type和content-length。
request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))
表单
request支持application/x-www-form-urlencoded和multipart/form-data实现表单上传。
x-www-form-urlencoded很简单:
request.post('http://service.com/upload', {form:{key:'value'}})
或者:
request.post('http://service.com/upload').form({key:'value'})
使用multipart/form-data不用操心设置header之类的琐事,request会帮你解决。
var r = request.post('http://service.com/upload') var form = r.form() form.append('my_field', 'my_value') form.append('my_buffer', new Buffer([1, 2, 3])) form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png')) form.append('remote_file', request('http://google.com/doodle.png'))
HTTP认证
request.get('http://some.server.com/').auth('username', 'password', false);
或
request.get('http://some.server.com/', {'auth': {'user': 'username','pass': 'password','sendImmediately': false } });
sendImmediately,默认为真,发送一个基本的认证header。设为false之后,收到401会重试(服务器的401响应必须包含WWW-Authenticate指定认证方法)。
sendImmediately为真时支持Digest认证。
OAuth登录
// Twitter OAuth var qs = require('querystring'), oauth ={ callback: 'http://mysite.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) {// Ideally, you would take the body in the response// and construct a URL that a user clicks on (like a sign in button).// The verifier is only available in the response after a user has// verified with twitter that they are authorizing your app.var access_token = qs.parse(body), oauth ={ consumer_key: CONSUMER_KEY, consumer_secret: CONSUMER_SECRET, token: access_token.oauth_token, verifier: access_token.oauth_verifier }, url = 'https://api.twitter.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: CONSUMER_SECRET, token: perm_token.oauth_token, token_secret: perm_token.oauth_token_secret }, url = 'https://api.twitter.com/1/users/show.json?', params ={ screen_name: perm_token.screen_name, user_id: perm_token.user_id } ;url += qs.stringify(params)request.get({url:url, oauth:oauth, json:true}, function (e, r, user) { console.log(user) }) }) })
定制HTTP header
User-Agent之类可以在options对象中设置。在下面的例子中,我们调用github API找出某仓库的收藏数和派生数。我们使用了定制的User-Agent和https.
var request = require('request');var options = {url: 'https://api.github.com/repos/mikeal/request',headers: {'User-Agent': 'request' } };function callback(error, response, body) {if (!error && response.statusCode == 200) {var info = JSON.parse(body);console.log(info.stargazers_count +"Stars");console.log(info.forks_count +"Forks"); } }request(options, callback);
cookies
默认情况下,cookies是禁用的。在defaults或options将jar设为true,使后续的请求都使用cookie.
var request = request.defaults({jar: true}) request('http://www.google.com', function () { request('http://images.google.com') })
通过创建request.jar()的新实例,可以使用定制的cookie,而不是request全局的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至少需要三个参数,最后一个是回调函数。
项目主页
request的GitHub主页
Nodejs Request使用介绍相关推荐
- 【JavaScript进阶学习】NodeJs语言的介绍及基本使用
NodeJs语言的介绍 NodeJs服务器语言,后端语言,采用了ECMAScript的语法,用来在服务器中开启服务,操作文件,处理路径,处理请求,发送数据等服务功能. NodeJs的解析器:V8引擎 ...
- nodejs request模块
文章目录 nodejs request模块 什么是npm 包 request npm安装request和使用 demo1: 检测rinkeby 网络是否正常 nodejs request模块 什么是n ...
- 如何启用nodejs request模块的调试模式
nodejs里的request module是一个进行HTTP通讯非常好用的库,最近查看它的源代码,发现一个有用的调试模式. 第134行, 把nodejs当前的环境变量NODE_DEBUG的值写入Re ...
- nodejs request module里的json参数的一个坑
今天工作的时候遇到一个坑,在客户端用nodejs给服务器发送HTTP请求,服务器老是报错:In the context of Data Services an unknown internal ser ...
- NodeJS常用模块介绍
收集了NodeJS开发中常用的一些模块. MVC框架 - Express Express 是轻量灵活的Nodejs Web应用框架,它可以快速地搭建网站.Express框架建立在Nodejs内置的Ht ...
- java search 不能使用方法_elasticsearch(七)java 搜索功能Search Request的介绍与使用...
目录 前端几节都是介绍的基于单个文档或着单个文档库的操作, 本节开始将介绍基于所有或指定的任何个数文档库的操作的api SearchRequest用于与搜索文档.聚合.定制查询有关的任何操作,还提供了 ...
- nodejs request库拉取jsp接口 gb2312、GBK中文乱码解决方法
1.抓取一个ip获取定位的接口时,乱码 使用http库或者request库请求一个url地址时,中文全部乱码了.弄了好久,问题终于解决了,下面给出解决方案. 2.尝试axios处理特定编码 常用用ax ...
- Request简单介绍
1.request原理 requst对象是由服务器创建的,是来获取请求消息的,而response是来设置响应消息的 2.request对象继承体系结构 ServletRequest (接口) ...
- nodejs request模块用法
request是服务端发起请求的工具包 1.安装 npm i request 2.基本用法 默认是GET请求 var request = require('request'); request('您的 ...
最新文章
- 【如何快速的开发一个完整的iOS直播app】(美颜篇)
- LeetCode-滑动窗口-3. 无重复字符的最长子串
- 百度编辑器 UEditor setContent()
- 心路历程(六)-一个人的后台
- MATLAB | 解决打开延迟的情况
- java maven 项目依赖关系,java – 关于依赖关系共享的Maven多模块项目组合
- Axure的一些入门小案例
- 凸优化第六章逼近与拟合 6.3 正则化逼近
- SQL夯实基础(九)MySQL联接查询算法
- 在virtual box虚拟机上下载sniffer pro
- 亲爱的,别把上帝缩小了 ---- 读书笔记3
- 计算机进入安全模式,电脑无法进入安全模式怎么办
- 漏洞平台之pikachu详细图文搭建教程
- 105个软件测试工具大放送
- Day001--Scala中的下载安装配置及下载安装集成开发环境IDEA
- JavaScript 实现音乐播放器
- php搭建markdown云笔记_Typora+坚果云:支持markdown的云笔记搭建
- QtCreator 下使用glut.lib glut.dll
- 循序渐进自学爬虫(一): 基础篇2
- 如何制作渐变色二维码