我使用npm request的get()
方法获取外部网址的内容。但也有一些网站回应“网页被阻止!”,例如http://gourmet.goo.ne.jp/
从浏览器访问此站点时仍然可以 这是代码的一部分:
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
});
你能给我一些建议吗?
答案 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'
希望对你有所帮助。