nodejs实用示例 缩址还原


Posted in NodeJs onDecember 28, 2010

思路非常简单:
1. httpserver获取需要还原的url;
2. 使用httpclient递归请求这个url,直到发现http status not in (302, 301)为止。
3. 返回还原的原url。

好吧,代码如下:

var net = require('net'), 
http = require('http'), 
url = require('url'), 
fs = require('fs'); 
var DEFAULT_PORTS = { 
'http:': 80, 
'https:': 443 
}; 
var INDEX_TPL = fs.readFileSync('index.html'); 
function _write(str, res, content_type) { 
if(res.jsonp_cb) { 
str = res.jsonp_cb + '("' + str + '")'; 
} 
res.writeHead(200, { 
'Content-Length': str.length, 
'Content-Type': content_type || 'text/plain' 
}); 
res.end(str); 
}; 
function expand(short_url, res) { 
var info = url.parse(short_url); 
// console.log('info: ' + JSON.stringify(info)); 
if(info.protocol != 'http:') { // 无法请求https的url? 
_write(short_url, res); 
return; 
} 
var client = http.createClient(info.port || DEFAULT_PORTS[info.protocol], info.hostname); 
var path = info.pathname || '/'; 
if(info.search) { 
path += info.search; 
} 
var headers = { 
host: info.hostname, 
'User-Agent': 'NodejsSpider/1.0' 
}; 
var request = client.request('GET', path, headers); 
request.end(); 
request.on('response', function (response) { 
if(response.statusCode == 302 || response.statusCode == 301) { 
expand(response.headers.location, res); 
} else { 
_write(short_url, res); 
} 
}); 
}; 
//expand('http://sinaurl.cn/hbMUII'); 
// http服务 
http.createServer(function(req, res){ 
if(req.url.indexOf('/api?') == 0) { 
var params = url.parse(req.url, true); 
if(params.query && params.query.u) { 
if(params.query.cb) { // 支持jsonp跨域请求 
res.jsonp_cb = params.query.cb; 
} 
expand(params.query.u, res); 
} else { 
_write('', res); 
} 
} else { 
_write(INDEX_TPL, res, 'text/html'); 
} 
}).listen(1235); 
process.on('uncaughtException', function (err) { 
console.log('Caught exception: ' + err); 
});

启动你的web服务器吧:
$ node urlexpand.js
打开浏览器直接访问:
http://127.0.0.1:1235/api?u=http://is.gd/imWyT
或者访问我的测试服务器:
http://yongwo.de:1235/api?u=http://is.gd/imWyT&cb=foo
NodeJs 相关文章推荐
nodejs教程之制作一个简单的文章发布系统
Nov 21 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 NodeJs
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 #NodeJs
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 #NodeJs
nodejs 后缀名判断限制代码
Mar 31 #NodeJs
NodeJS框架Express的模板视图机制分析
Jul 19 #NodeJs
用nodejs访问ActiveX对象,以操作Access数据库为例。
Dec 15 #NodeJs
NodeJS 模块开发及发布详解分享
Mar 07 #NodeJs
nodejs入门详解(多篇文章结合)
Mar 07 #NodeJs
You might like
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
go和python变量赋值遇到的一个问题
2017/08/31 Python
python批量赋值操作实例
2018/10/22 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
Python @property原理解析和用法实例
2020/02/11 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
预备党员政审材料
2014/02/04 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
百年校庆节目主持词
2014/03/27 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
个人总结格式范文
2015/03/09 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python