Nodejs Request使用介绍

这篇就先介绍一个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-typecontent-length

request.get(‘http://google.com/img.png‘).pipe(request.put(‘http://mysite.com/img.png‘))

表单

request支持application/x-www-form-urlencodedmultipart/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是禁用的。在defaultsoptionsjar设为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主页

时间: 2024-10-12 03:08:25

Nodejs Request使用介绍的相关文章

NodeJS常用模块介绍

收集了NodeJS开发中常用的一些模块. MVC框架 - Express Express 是轻量灵活的Nodejs Web应用框架,它可以快速地搭建网站.Express框架建立在Nodejs内置的Http模块上,并对Http模块再包装,从而实际Web请求处理的 功能.它支持多种前端模板,如Jade, EJS等.它是T.J大神的作品,不过已经交由其它团队维护了. Koa是T.J大神的另外一个作品,号称下一 代NodeJS web框架.使用 koa 编写 web 应用,通过组合不同的 generat

Nodejs之目录介绍及app.js说明

nodejs目录说明,app.js简单介绍及如何设置app.js启动项目. 新建的项目结构应该是这样 bin:项目的启动文件,也可以放其他脚本. node_modules:用来存放项目的依赖库. public:用来存放静态文件(css,js,img). routes:路由控制器. views:视图目录(相当于MVC中的V). app.js:项目入口及程序启动文件. package.json:包描述文件及开发者信息. ----------------------------------------

nodeJS(request+cheerio+pump)稳定爬取SSR网页数据

记录自己的爬虫经验 本次是爬取某SSR网站列表页及详情页数据,包括文本及图片,将数据存入MongoDB数据库,将图片下载至本地: 首先呢,用到的nodeJS模块有: request: 用于请求网址内容或请求图片内容 cheerio: 通俗的讲,可以当做jQuery使用 pump: 一种管道,操纵数据流,比原生的pipe好用,可操控性强,具体用法可去npm查询 path: 读取操作文件路径 fs: 操作文档读写等 第一步:引入需要用到的相关模块,建议用yarn安装以下模块 const reques

NodeJs的简单介绍

Nodejs是由谷歌v8运行.c++编写的js运行的环境,这里需要记住的是Nodejs只是一个环境.  目前很多主流网站都是使用nodejs,如知乎等大型的网站. 我们关于nodejs学习目标:安装Node,搭建服务器,express,mysol,mongodb,编写后台业务逻辑,编写接口,完成vue前台页面. Node版本:基数版为开发版本,偶数版为稳定版本. 我们平时工作的话一般采用的是偶数的稳定版本,用起来比较稳定,不容易出现bug,而技术版本由于是开发版本,很容易出现不稳定现象,给工作带

{Nodejs} request URL 中文乱码

1 var cheerio = require("cheerio"); 2 var request = require('request'); 3 var iconv = require('iconv-lite'); 4 5 request.get({url:'http://mil.news.sina.com.cn/2015-07-21/1454835521.html',encoding:null},function(error,response,body){ 6 var html =

NodeJs+Request+Cheerio 采集数据

目的:采集网站文章. 两个依赖项: request :https://github.com/request/request cheerio:https://github.com/cheeriojs/cheerio package.json文件: { "name":"zqz", "version":"1.0.1", "private":false, "dependencies":{ &qu

25-1 request模块介绍

requests模块 - 基于如下5点展开requests模块的学习 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的地位. 为什么要使用requests模块 因为在使用urllib模块的时候,会有诸多不便之处,总结如下: 手动处理url编码 手动处理post请求参数 处理cookie和代理操作繁琐 ...... 使用requests模块: 自动处理url编码 自动处

NodeJs+http+fs+request+cheerio 采集,保存数据,并在网页上展示(构建web服务器)

目的: 数据采集 写入本地文件备份 构建web服务器 将文件读取到网页中进行展示 目录结构: package.json文件中的内容与上一篇一样:NodeJs+Request+Cheerio 采集数据 request :https://github.com/request/request 使得请求变得更容易,简单 cheerio:https://github.com/cheeriojs/cheerio 用来解析dom结构,类似jQuery,挺好用 app.js文件: /** * 数据采集 * 写入

NodeJS中 package.json 解析

package.json 中包含各种所需模块以及项目的配置信息(名称.版本.许可证等)meta 信息. 包含可配置项 name 名称 应用描述 description 版本号 version 应用的配置项 config 作者 author 资源仓库地址 respository 授权方式 licenses 目录 directories 应用入口文件 main 命令行文件 bin 项目应用运行依赖模块 dependencies 项目应用开发环境依赖 devDependencies 运行引擎 engi