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学习笔记之网络编程
Aug 03 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
nodejs中解决异步嵌套循环和循环嵌套异步的问题
Jul 12 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 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代码优化的53个细节
2014/03/03 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python中的自定义函数学习笔记
2014/09/23 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
详解python中的数据类型和控制流
2019/08/08 Python
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
个人自我剖析材料
2014/02/07 职场文书
《去年的树》教学反思
2014/04/11 职场文书
营销与策划专业求职信
2014/06/20 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
逃课检讨书
2015/01/26 职场文书
教师辞职信范文
2015/02/28 职场文书
应急管理工作总结2015
2015/05/04 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
服务器间如何实现文件共享
2022/05/20 Servers