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文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
NodeJS 实现多语言的示例代码
Sep 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 5.5 新特性
2013/07/02 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
Python对列表排序的方法实例分析
2015/05/16 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
python Web开发你要理解的WSGI & uwsgi详解
2018/08/01 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
利用python 下载bilibili视频
2020/11/13 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
财务总经理岗位职责
2014/02/16 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
网站创业计划书
2014/04/30 职场文书
运动会宣传稿50字
2015/07/23 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫