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 相关文章推荐
Ubuntu中搭建Nodejs开发环境过程分享
Jun 01 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
轻松创建nodejs服务器(5):事件处理程序
Dec 18 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
Feb 07 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 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
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
php header Content-Type类型小结
2011/07/03 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
Exjs 入门篇
2010/04/07 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
javascript动画浅析
2012/08/30 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
python版学生管理系统
2018/01/10 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python多线程和多进程关系详解
2020/12/14 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
毕业自我评价范文
2013/11/17 职场文书
会计简历自我评价
2015/03/10 职场文书
员工开除通知书
2015/04/25 职场文书
工程款申请报告
2015/05/15 职场文书
技能培训通讯稿
2015/07/18 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
七年级作文之环保作文
2019/10/17 职场文书
python实现批量移动文件
2021/04/05 Python