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远程代码执行
Aug 28 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
Jul 14 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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,ajax实现分页
2008/03/27 PHP
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
PHP高级OOP技术演示
2009/08/27 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
js使用心得分享
2015/01/13 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
用pycharm开发django项目示例代码
2019/06/13 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Python进行统计建模
2020/08/10 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
彩色的非洲教学反思
2014/02/18 职场文书
安全生产责任书范本
2014/04/15 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
优秀党员申报材料
2014/12/18 职场文书
在职证明范本
2015/06/15 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书