节点js请求 – 空的身体作出回应

我正在使用节点js请求从下面的URL检索HTML,但正文返回空。

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' }, 

我认为这意味着有redirect? 即使它返回了200 OK,而不是302redirect。

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

任何帮助赞赏。

你显示的内容看起来像是在redirect之后发生的事情 – 看到referer被设置为你的原始URL。

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

例如,请参阅我为此答案编写的代码:

 '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头。