Node.js中的http请求客户端示例(request client)


Posted in Javascript onMay 04, 2017

Node.JS有一个request模块,可以很方便的抓取网页内容。最简单的一个示例:

var request = require('request');

request('http://www.google.com', function (error, response, body) {
 if (!error && response.statusCode == 200) {
  console.log(body);
 }
})

由上例可以看出用request发起一个http请求确实非常简单,不过唯一的问题就是,request模块的第三方依赖比较多,导致这个模块非常地大,要占用好几M的空间。

其实用node.js原生的http模块就可以很方便地写出一个类似的request的功能,只要几十行即可:

var http = require('http')
var url  = require('url')


var request = function(reqUrl, data, cb, headers) {
 var dataType = typeof data

 if (dataType == 'function') {
  headers = cb
  cb   = data
  rawData = null
 } else if (dataType == 'object') {
  rawData = JSON.stringify(data)
 } else {
  rawData = data
 }

 var urlObj = url.parse(reqUrl)

 var options = {
   hostname : urlObj.hostname
  , port   : urlObj.port
  , path   : urlObj.pathname
  , method  : rawData ? 'post' : 'get'
 }

 headers && (options.headers = headers)


 var req = http.request(options, function(res) {
  var receives = []

  if (res.statusCode !== 200) {
   cb && cb(new Error('Request Failed. Status Code: ' + res.statusCode + ' ' + reqUrl))
   return
  }

  res.on('data', function(chunk) {
   receives.push(chunk)
  })

  res.on('end', function() {
   var resData = Buffer.concat(receives).toString()
   try {
    resData = JSON.parse(resData)
   } catch (e) { }

   cb && cb(null, res, resData)
  })
 })

 req.on('error', function(e) {
  cb && cb(e)
 })

 rawData && req.write(rawData)

 req.end()
}


module.exports = request

使用接口与request模块是一样的,比如我们抓取新浪新闻首页的内容

request('http://news.sina.com.cn', function(err, res, data) {
 console.log('geted', data)
})

其次它还支持抓取时附加cookie等header认证信息,如

request('http://news.sina.com.cn', function(err, res, data) {
 console.log('get with cookie', data)
}, { cookie: '_sessionid=1234567890' })

对POST的支持

request('http://news.sina.com.cn', { postdata: 'json' }, function(err, res, data) {
 console.log('get with cookie', data)
}, { cookie: '_sessionid=1234567890' })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js可突破windows弹退效果代码
Aug 09 Javascript
JQuery 获取和设置Select选项的代码
Feb 07 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
Apr 10 Javascript
JS小游戏之极速快跑源码详解
Sep 25 Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
jQuery插件Timelinr 实现时间轴特效
Oct 04 Javascript
javascript实现tab切换的两个实例
Nov 05 Javascript
使用vue实现点击按钮滑出面板的实现代码
Jan 10 Javascript
JS简单获取当前年月日星期的方法示例
Feb 07 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
vue中英文切换实例代码
Jan 21 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 #Javascript
vue.js开发环境搭建教程
May 04 #Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
May 04 #jQuery
详解webpack es6 to es5支持配置
May 04 #Javascript
angular 基于ng-messages的表单验证实例
May 04 #Javascript
JS实现标签页切换效果
May 04 #Javascript
ES6下React组件的写法示例代码
May 04 #Javascript
You might like
Terran建筑一览
2020/03/14 星际争霸
php静态文件返回304技巧分享
2015/01/06 PHP
php中的异常和错误浅析
2017/05/03 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
探索Vue高阶组件的使用
2018/01/08 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
对python:循环定义多个变量的实例详解
2019/01/20 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
Python class的继承方法代码实例
2020/02/14 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
深入了解python列表(LIST)
2020/06/08 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
python 两种方法删除空文件夹
2020/09/29 Python
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
班级道德讲堂实施方案
2014/02/24 职场文书
525心理活动总结
2014/07/04 职场文书
学习礼仪心得体会
2014/09/01 职场文书
导游词之河北邯郸
2019/09/12 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
python中requests库+xpath+lxml简单使用
2021/04/29 Python
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android