2014-01-28 52 views
0

好吧我试图获取这个特定的URL和node.js行为的标题让我感到困惑。Node.js http.get请求从curl请求中获取完全不同的头文件

我的代码:

var http = require('http'); 

var req = http.get("http://listen.radionomy.com/abc-lounge", function(res) { 
    console.log("headers: ", res.headers); 
}); 

打印出:

头:{ '缓存控制': '私', '内容类型':“text/html的; charset = utf-8',server:'Microsoft-IIS/7.5','x-aspnet-version': '4.0.30319','x-powered-by':'ASP.NET',date:'星期二,2014年1月28日 十四时18分27秒格林尼治标准时间”, '内容长度': '8309'}

现在,我尝试了用头在命令行卷曲:

卷曲-I http://listen.radionomy.com/abc-lounge

这打印出我正在寻找什么(重定向网址):

HTTP/1.1 302实测值
缓存控制:私人
的Content-Length:0
内容类型:应用/八位字节流
位置: http://streaming.radionomy.com/ABC-Lounge
服务器: 微软-IIS/7.5
X- AspNetMvc-版本:5.0
X-ASPNET-版本: 4.0.30319
X供电,通过:ASP.NET
日期:星期二,2014年1月28日14时19分二十秒GMT

我不明白为什么节点正在获取一组不同的标题。它不应该遵循默认情况下的重定向。我甚至不认为这是一个重定向问题。

回答

0

我假装curl要求加入一些headershttp.get像这样:

var http = require('http'); 

var options = { 
    host: 'listen.radionomy.com', 
    path: '/abc-lounge', 
    headers: { 
     'user-agent': 'curl/7.31.0', 
     'accept': '*/*'   
    } 
}; 

var req = http.get(options, function(res) { 
    console.log('status:', res.statusCode) 
    console.log("headers: ", res.headers); 
}); 

输出将是:

status: 302 
headers: { 'cache-control': 'private', 
    'content-type': 'application/octet-stream', 
    location: 'http://streaming.radionomy.com/ABC-Lounge', 
    server: 'Microsoft-IIS/7.5', 
    'x-aspnetmvc-version': '5.0', 
    'x-aspnet-version': '4.0.30319', 
    'x-powered-by': 'ASP.NET', 
    date: 'Tue, 28 Jan 2014 15:02:16 GMT', 
    'content-length': '0' } 
+0

谢谢,这有助于。奇怪的是,如果你不通过“用户代理”,listen.radionomy.com会为你提供一组不同的标题。这里的节点没什么问题,就像我认为这不是重定向问题。 –

2

这是因为http.get实际上遵循重定向

+1

节点的'http.get()'不应该遵循。尝试一个SO的“共享”链接,它包括日志中的位置:'/ questions/...'。 –