nodejs 실제 예 약어 Restoration_javascript 기술

WBOY
풀어 주다: 2016-05-16 18:13:10
원래의
1065명이 탐색했습니다.

아이디어는 매우 간단합니다.
1. httpserver는 복원해야 하는 URL을 가져옵니다.
2. http 상태가 (302, 301)에 없을 때까지 httpclient를 사용하여 이 URL을 반복적으로 요청합니다.
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; 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'
}var request = client.request('GET', 경로, 헤더);
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('발견된 예외: ' err);
}); 🎜>
웹 서버 시작:
$ 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으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿