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服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
nodejs简单实现操作arduino
Sep 25 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
Nodejs让异步变成同步的方法
Mar 02 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
一个简单的MySQL数据浏览器
2006/10/09 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
php的4种常用运行方式详解
2016/12/22 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
python实现俄罗斯方块游戏
2020/03/25 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
幼教简历自我评价
2014/01/28 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
幼儿园运动会口号
2014/06/07 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
2015年度物流工作总结
2015/04/30 职场文书