2011-03-03 10 views
2

나는 Node.js를 사용하고 있지만이 반드시 단지 노드와 관련이없는 느낌이 - 어쨌든무한 리디렉션

내가 노드에서 단축 URL을 쓰고 있어요, 그리고 내가 페이지 제목을 얻으려면 단축 URL을 사용하고 싶습니다. 대부분의 경우 작동합니다. 보통 리디렉션을 따라야합니다.

그러나 gmail.com을 클릭하면 무한 리디렉션 루프가됩니다. http://gmail.comhttps://www.google.com/accounds/ServiceLogin?service=mail&passive=true&rm=false&continue=으로 리디렉션됩니다. ...... 차례 차례로 영원히 그 자체로 방향을 바꾼다.

내 코드는 기본적으로 같은

var http = require('http'), 
https = require('https'), 
URL = require('url'), 
querystring = require('url'); 

var http_client = {}; 

function _makeRequest(url, callback) { 
    var urlInfo = URL.parse(url); 

    var reqUrl = urlInfo.pathname || '/'; 
    reqUrl += urlInfo.search || ''; 
    reqUrl += urlInfo.hash || ''; 

    var opts = { 
    host: urlInfo.hostname, 
    port: urlInfo.port || (urlInfo.protocol == 'https' ? 443 : 80), 
    path = reqUrl, 
    method: 'GET' 
    }; 

    var protocol = (urlInfo.protocol == 'https' ? https : http); 

    var req = protocol.request(opts, function(res) { 
     var content = ''; 
     res.setEncoding('utf8'); 
     res.addListener('data', function(chunk) { 
     content += chunk; 
     }); 
     res.addListener('end', function() { 
      _requestReceived(content, res.headers, callback); 
     }); 
    }); 

    req.end(); 
}; 

function _requestReceived(content, headers, callback) { 
    var redirect = false; 

    if(headers.location) { 
    newLocation = headers.location 
    redirect = true; 
    } 
    if(redirect) { 
    console.log('redirecting to :'+newLocation); 
    _makeRequest(newLocation, callback) 
    } else { 
    callback(null, content); 
    } 
}; 

네입니다!

+0

무엇이 당신의 질문은 무엇입니까? – dhofstet

+0

무한정으로 리디렉션되지 않도록 어떻게 중지합니까? Gmail에서 리디렉션 헤더를 계속 보내고 있습니다. – Lowgain

답변

0

아, 알겠습니다.

은 HTTPS에 대한 수표는

var protocol = (urlInfo.protocol == 'https' ? https : http); 

같았다하지만 노드는 프로토콜에 콜론을 추가, 그래서 때문에 그것이 될 리디렉션 할 HTTP 및 Gmail을 사용하여 보관이의

var protocol = (urlInfo.protocol == 'https:' ? https : http); 

를 있었어야 ~ https 영원히