Nodejs request.get响应“网页被阻止!”

时间:2017-05-31 12:12:41

标签: javascript node.js request

我使用npm requestget()方法获取外部网址的内容。但也有一些网站回应“网页被阻止!”,例如http://gourmet.goo.ne.jp/

enter image description here

从浏览器访问此站点时仍然可以 这是代码的一部分:

var url = 'http://gourmet.goo.ne.jp/';
var headers = {};
headers['X-Requested-With'] = 'XMLHttpRequest';
headers['Referer Policy'] = 'no-referrer-when-downgrade';
headers['referer'] = url;
var mod_request = require('request');
var req = mod_request.get({ uri: url, encoding: 'binary', headers: headers }, function(err, res, body) {  
   var result = res.body; // res.body contain error page when url is http://gourmet.goo.ne.jp/
   // Process content here
});

你能给我一些建议吗?

2 个答案:

答案 0 :(得分:3)

他们可能会检测到您使用脚本发出请求,因此他们想阻止您。

绕过它的一种非常常见的方法是更改​​User Agent,模拟浏览器:

var url = 'http://gourmet.goo.ne.jp/';
var headers = {};
headers['X-Requested-With'] = 'XMLHttpRequest';
headers['Referer Policy'] = 'no-referrer-when-downgrade';
headers['referer'] = url;
headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"

var mod_request = require('request');
var req = mod_request.get({ uri: url, encoding: 'binary', headers: headers }, function(err, res, body) {  
   var result = res.body; // res.body contain error page when url is http://gourmet.goo.ne.jp/
   // Process content here
});

对于初始请求,重要的是请求标头。因此,尝试复制请求标头并将它们放入脚本中,然后删除不需要的标头,保留您真正需要的最小标头集。

答案 1 :(得分:0)

我想你忘了设置标题Access-Control-Allow-Origin

headers['Access-Control-Allow-Origin'] =  '*'

headers['Access-Control-Allow-Methods'] = 'GET,PUT,POST,DELETE'

希望对你有所帮助。