Node.js中的http請(qǐng)求客戶端示例(request client)
Node.JS有一個(gè)request模塊,可以很方便的抓取網(wǎng)頁(yè)內(nèi)容。最簡(jiǎn)單的一個(gè)示例:
var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); } })
由上例可以看出用request發(fā)起一個(gè)http請(qǐng)求確實(shí)非常簡(jiǎn)單,不過(guò)唯一的問(wèn)題就是,request模塊的第三方依賴(lài)比較多,導(dǎo)致這個(gè)模塊非常地大,要占用好幾M的空間。
其實(shí)用node.js原生的http模塊就可以很方便地寫(xiě)出一個(gè)類(lèi)似的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模塊是一樣的,比如我們抓取新浪新聞首頁(yè)的內(nèi)容
request('http://news.sina.com.cn', function(err, res, data) { console.log('geted', data) })
其次它還支持抓取時(shí)附加cookie等header認(rèn)證信息,如
request('http://news.sina.com.cn', function(err, res, data) { console.log('get with cookie', data) }, { cookie: '_sessionid=1234567890' })
對(duì)POST的支持
request('http://news.sina.com.cn', { postdata: 'json' }, function(err, res, data) { console.log('get with cookie', data) }, { cookie: '_sessionid=1234567890' })
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
yarn?install命令報(bào)錯(cuò)warning?package-lock.json?found解決辦法
這篇文章主要給大家介紹了關(guān)于yarn?install命令報(bào)錯(cuò)warning?package-lock.json?found的解決辦法,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),還分享了更多yarn install遇到的報(bào)錯(cuò)及解決方案,需要的朋友可以參考下2024-02-02nodejs對(duì)項(xiàng)目下所有空文件夾創(chuàng)建gitkeep的方法
這篇文章主要介紹了nodejs對(duì)項(xiàng)目下所有空文件夾創(chuàng)建gitkeep的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08koa2 用戶注冊(cè)、登錄校驗(yàn)與加鹽加密的實(shí)現(xiàn)方法
這篇文章主要介紹了koa2 用戶注冊(cè)、登錄校驗(yàn)與加鹽加密的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07淺析Node.js的Stream模塊中的Readable對(duì)象
這篇文章主要介紹了淺析Node.js的Stream模塊中的Readable對(duì)象,是Node.js入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-07-07Koa2微信公眾號(hào)開(kāi)發(fā)之消息管理
這篇文章主要介紹了Koa2微信公眾號(hào)開(kāi)發(fā)之消息管理,這一節(jié)我們就來(lái)看看公眾號(hào)的消息管理。并實(shí)現(xiàn)一個(gè)自動(dòng)回復(fù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Nodejs實(shí)現(xiàn)的操作MongoDB數(shù)據(jù)庫(kù)功能完整示例
這篇文章主要介紹了Nodejs實(shí)現(xiàn)的操作MongoDB數(shù)據(jù)庫(kù)功能,結(jié)合完整實(shí)例形式分析了nodejs針對(duì)MongoDB數(shù)據(jù)庫(kù)的連接及增刪改查基本操作技巧,需要的朋友可以參考下2019-02-02Node.js的HTTP模塊、URL模塊與supervisor工具介紹
這篇文章介紹了Node.js的HTTP模塊、URL模塊與supervisor工具,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06