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实用示例 缩址还原
Dec 28 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
Windows系统中安装nodejs图文教程
Feb 28 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
Nodejs--post的公式详解
Apr 29 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodejs中实现修改用户路由功能
May 24 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 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变量作用域的深入解析
2013/06/03 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
javascript &&和||运算法的另类使用技巧
2009/11/28 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
使用console进行性能测试
2015/04/27 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
详解python中的Turtle函数库
2018/11/19 Python
python多线程抽象编程模型详解
2019/03/20 Python
python3获取url文件大小示例代码
2019/09/18 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
法学专业个人求职信
2013/09/26 职场文书
出国留学经济担保书
2014/04/01 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
初中班干部工作总结
2015/08/10 职场文书