nodejs実践例の略語復元_javascriptスキル

WBOY
リリース: 2016-05-16 18:13:10
オリジナル
1066 人が閲覧しました

考え方は非常に単純です。
1. httpserver は復元する必要がある URL を取得します。
2. http ステータスが (302、301) にないことが見つかるまで、httpclient を使用してこの URL を再帰的に要求します。
3. 復元された元の URL に戻ります。

OK、コードは次のとおりです:

コードをコピーします コードは次のとおりです:

var net = require('net')、
http = require('http')、
url = require('url')、
fs = require('fs' );
var DEFAULT_PORTS = {
'http:': 80,
'https:': 443
};
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'
}); ;
};
function Expand(short_url, res) {
var info = url.parse(short_url);
// console.log('info: ' JSON.stringify(info)) ;
if( info.protocol != 'http:') { // https URL をリクエストできませんか?
return
}
var client = http.createClient(info.port || DEFAULT_PORTS[info.protocol], info.hostname);
var path = info.pathname ||
if(info.search); = info.search;
}
var headers = {
host: info.hostname,
'User-Agent': 'NodejsSpider/1.0'
}; 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, 'text/html'); >}).listen(1235 );
process.on('uncaughtException', function (err) {
console.log('キャッチされた例外: ' 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
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート