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读取memcache示例分享
Jan 02 NodeJs
使用Nodejs开发微信公众号后台服务实例
Sep 03 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
配置nodejs环境的方法
May 13 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 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的宝库目录--PEAR
2006/10/09 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python爬豆瓣电影实例
2018/02/23 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
全国道德模范事迹
2014/02/01 职场文书
运动会方队口号
2014/06/07 职场文书
归途列车观后感
2015/06/17 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python