2016-09-21 68 views
1

我正在使用节点js请求从以下URL检索HTML,但正文返回空。节点js请求 - 空身回应

var request = require("request"); 

var url = 'http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20'; 

request({ 
    uri: url 
    }, function (error, response, body) { 

     console.log(body); 

     if (response.statusCode != '200') { 
      console.log('fail'); 
      console.log(response.statusCode + ' # ' + error); 
     } else { 
      console.log(response.statusCode); 
      console.log('############'); 
      console.log(response); 
     } 
    }); 

在仔细检查,我可以在响应中看到这一点:

_header: 'GET /webapp/wcs/stores/servlet/CatalogNavigationSearchResultCmd?langId=-1&storeId=12556&catalogId=33057&beginIndex=1&viewAllFlag=false&pageSize=20&searchTermScope=3&searchTermOperator=LIKE&searchType=ALL&sort_field=Relevance&searchTerm=TS19M11KRED&x=25&y=11&geoip=search HTTP/1.1\r\nreferer: http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20&geoip=prod\r\nhost: www.topshop.com\r\nConnection: close\r\n\r\n', 
_headers: 
    { referer: 'http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20&geoip=prod', 
    host: 'www.topshop.com' }, 

我假设意味着已经重定向?尽管它返回了200 OK而不是302重定向。

我不确定从重定向检索正文的最佳方法吗?我是否需要对标题中的网址发出另一个请求?但是,在这种情况下,响应代码不应该是302而是200?

任何帮助表示赞赏。

回答

2

您显示的内容看起来像是重定向后发生的事情 - 请参阅将referer设置为您的原始URL。

也许你应该设置更多的标头,如User-Agent,因为有些服务器没有它就没有响应。

例如,看到我写了this answer代码:

'use strict'; 
var request = require('request'); 
var url = 'https://api.github.com/users/rsp'; 
request.get({ 
    url: url, 
    json: true, 
    headers: {'User-Agent': 'request'} 
    }, (err, res, data) => { 
    if (err) { 
     console.log('Error:', err); 
    } else if (res.statusCode !== 200) { 
     console.log('Status:', res.statusCode); 
    } else { 
     // data is already parsed as JSON: 
     console.log(data.html_url); 
    } 
}); 

它返回:

注意,它并没有在User-Agent头工作:

'use strict'; 
var request = require('request'); 
var url = 'https://api.github.com/users/rsp'; 
request.get({ 
    url: url, 
    json: true, 
    }, (err, res, data) => { 
    if (err) { 
     console.log('Error:', err); 
    } else if (res.statusCode !== 200) { 
     console.log('Status:', res.statusCode); 
    } else { 
     // data is already parsed as JSON: 
     console.log(data.html_url); 
    } 
}); 

它返回:

  • 状态:403

相同的URL,相同的代码 - 唯一的区别是User-Agent报头。

+0

传递用户代理修复它!非常感谢。 –