Reactjs React Axios Cheerio对GitHub响应的解析
我正试图从Axios请求从GitHub检索数据。我收到了一个有意义的失败错误,我想知道这是否是预期的行为,这种类型的错误在客户端是不可能的,或者是否有一种方法可以发出这个请求,而我只是错过了:Reactjs React Axios Cheerio对GitHub响应的解析,reactjs,github,cors,axios,cheerio,Reactjs,Github,Cors,Axios,Cheerio,我正试图从Axios请求从GitHub检索数据。我收到了一个有意义的失败错误,我想知道这是否是预期的行为,这种类型的错误在客户端是不可能的,或者是否有一种方法可以发出这个请求,而我只是错过了: componentDidMount() { axios .get('https://github.com/users/lukeschlangen/contributions',{ headers: { 'Access-Control-Allo
componentDidMount() {
axios
.get('https://github.com/users/lukeschlangen/contributions',{
headers: {
'Access-Control-Allow-Origin': '*'
}
})
.then(res => {
this.streakCounter(res);
})
.catch(err => console.log(err));
}
streakCounter(body) {
const $ = cheerio.load(body);
var data = [];
$('svg').find('rect').each(function(index, element) {
data.push({
count: parseInt($(element).attr('data-count')),
date: new Date($(element).attr('data-date'))
})
});
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
data = data.sort(function(a, b) {
return new Date(b.date) - new Date(a.date);
}).filter(function(el) {
return el.date.getTime() <= yesterday.getTime();
});
var streakCount = 0;
for (var i = 0; i < data.length; i++) {
if (data[i].count == 0) {
break;
}
streakCount++
}
console.log('streakCount:', streakCount);
}
我的猜测是,GitHub可能会直接拒绝这一点,客户端对此没有办法解决。这是我在响应中得到的错误:
未能加载:
对飞行前请求的响应未通过访问控制检查:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源因此,不允许原产地
通道响应的HTTP状态代码为404
如果可能的话,我更愿意在没有服务器的情况下完成这项工作,因此在我放弃之前,我想确认一下。您无法在前端解决这个问题,因为它需要Github进行服务器端更改
但是,你可以让你的前端ping你的后端,然后点击该URL并转发信息,或者使用服务来解决这个问题。我就是这么想的,只是想在我完成这项工作之前确认一下。非常感谢。如公认答案中所述,您可以使用CORS代理。但是,与使用第三方代理不同,您可以非常轻松地设置自己的代理。请参阅答案的“如何使用CORS代理解决”部分的“无访问控制允许源站标头”问题。只需5条命令,您就可以在2-3分钟内在Heroku上部署自己的代理。