2016-09-21 67 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

傳遞用戶代理修復它!非常感謝。 –