转自: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使用介绍相关推荐

  1. 【JavaScript进阶学习】NodeJs语言的介绍及基本使用

    NodeJs语言的介绍 NodeJs服务器语言,后端语言,采用了ECMAScript的语法,用来在服务器中开启服务,操作文件,处理路径,处理请求,发送数据等服务功能. NodeJs的解析器:V8引擎 ...

  2. nodejs request模块

    文章目录 nodejs request模块 什么是npm 包 request npm安装request和使用 demo1: 检测rinkeby 网络是否正常 nodejs request模块 什么是n ...

  3. 如何启用nodejs request模块的调试模式

    nodejs里的request module是一个进行HTTP通讯非常好用的库,最近查看它的源代码,发现一个有用的调试模式. 第134行, 把nodejs当前的环境变量NODE_DEBUG的值写入Re ...

  4. nodejs request module里的json参数的一个坑

    今天工作的时候遇到一个坑,在客户端用nodejs给服务器发送HTTP请求,服务器老是报错:In the context of Data Services an unknown internal ser ...

  5. NodeJS常用模块介绍

    收集了NodeJS开发中常用的一些模块. MVC框架 - Express Express 是轻量灵活的Nodejs Web应用框架,它可以快速地搭建网站.Express框架建立在Nodejs内置的Ht ...

  6. java search 不能使用方法_elasticsearch(七)java 搜索功能Search Request的介绍与使用...

    目录 前端几节都是介绍的基于单个文档或着单个文档库的操作, 本节开始将介绍基于所有或指定的任何个数文档库的操作的api SearchRequest用于与搜索文档.聚合.定制查询有关的任何操作,还提供了 ...

  7. nodejs request库拉取jsp接口 gb2312、GBK中文乱码解决方法

    1.抓取一个ip获取定位的接口时,乱码 使用http库或者request库请求一个url地址时,中文全部乱码了.弄了好久,问题终于解决了,下面给出解决方案. 2.尝试axios处理特定编码 常用用ax ...

  8. Request简单介绍

    1.request原理 requst对象是由服务器创建的,是来获取请求消息的,而response是来设置响应消息的 2.request对象继承体系结构 ServletRequest (接口)      ...

  9. nodejs request模块用法

    request是服务端发起请求的工具包 1.安装 npm i request 2.基本用法 默认是GET请求 var request = require('request'); request('您的 ...

最新文章

  1. 【如何快速的开发一个完整的iOS直播app】(美颜篇)
  2. LeetCode-滑动窗口-3. 无重复字符的最长子串
  3. 百度编辑器 UEditor setContent()
  4. 心路历程(六)-一个人的后台
  5. MATLAB | 解决打开延迟的情况
  6. java maven 项目依赖关系,java – 关于依赖关系共享的Maven多模块项目组合
  7. Axure的一些入门小案例
  8. 凸优化第六章逼近与拟合 6.3 正则化逼近
  9. SQL夯实基础(九)MySQL联接查询算法
  10. 在virtual box虚拟机上下载sniffer pro
  11. 亲爱的,别把上帝缩小了 ---- 读书笔记3
  12. 计算机进入安全模式,电脑无法进入安全模式怎么办
  13. 漏洞平台之pikachu详细图文搭建教程
  14. 105个软件测试工具大放送
  15. Day001--Scala中的下载安装配置及下载安装集成开发环境IDEA
  16. JavaScript 实现音乐播放器
  17. php搭建markdown云笔记_Typora+坚果云:支持markdown的云笔记搭建
  18. QtCreator 下使用glut.lib glut.dll
  19. 循序渐进自学爬虫(一): 基础篇2
  20. 如何制作渐变色二维码

热门文章

  1. 计算机网络最大传输速率求解
  2. 【Rust 日报】2022-04-28 Spacedrive 一个开源的跨平台文件资源管理器
  3. 激活Windows 10
  4. 单基因gsea_GSEA:基因集富集分析和ssGSEA:单样本基因集富集分析
  5. 输入输出一行字符串(应声虫)
  6. 【你不知道的CSS】mix-blend-mode
  7. taro 兼容支付宝小程序和微信小程序<七>-- 上传图片及图片转base64
  8. “21 天好习惯”第一期-10
  9. MES系统如何实现生产过程管理?
  10. Vue 简单集成环信SDK