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 相关文章推荐
用jquery和json从后台获得数据集的代码
Nov 07 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 Javascript
js图片自动轮播代码分享(js图片轮播)
May 06 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
Sep 12 Javascript
js全选按钮的实现方法
Nov 17 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
基于javascript实现图片切换效果
Apr 17 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
Feb 15 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
Oct 22 Javascript
详解jenkins自动化部署vue
May 14 Javascript
JS 数组和对象的深拷贝操作示例
Jun 06 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
咖啡的化学
2021/03/03 咖啡文化
PHP截取中文字符串的问题
2006/07/12 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
vue组件间的参数传递实例详解
2019/04/26 Javascript
详解package.json版本号规则
2019/08/01 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
Python的Django框架中settings文件的部署建议
2015/05/30 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
对Python 内建函数和保留字详解
2018/10/15 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
档案管理员岗位职责
2013/12/01 职场文书
迎新晚会主持词
2014/03/24 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
市级文明单位申报材料
2014/05/07 职场文书
给客户的感谢信
2015/01/21 职场文书
2015年招生工作总结
2015/05/04 职场文书
六一儿童节致辞
2015/07/31 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书