Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React Axios Cheerio对GitHub响应的解析_Reactjs_Github_Cors_Axios_Cheerio - Fatal编程技术网

Reactjs React Axios Cheerio对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

我正试图从Axios请求从GitHub检索数据。我收到了一个有意义的失败错误,我想知道这是否是预期的行为,这种类型的错误在客户端是不可能的,或者是否有一种方法可以发出这个请求,而我只是错过了:

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上部署自己的代理。