【问题标题】:empty response body in HTTP response in github actionsgithub操作中的HTTP响应中的空响应主体
【发布时间】:2020-12-19 07:49:20
【问题描述】:

我正在尝试创建一个 github 操作,该操作需要向 https://www.instagram.com/<username>/?__a=1 发送 http 请求。

当我在本地运行它时,它运行得非常好,并且给了我关注者的数量。

但是当我在 github 操作中使用它时,它无法解析 JSON 字符串,因为响应为 null

这里是github操作文件https://github.com/ashawe/actions-check/blob/e80ca115544979cdb3180207b99c7724e4446849/index.js的链接

这是获取关注者的代码(从第 94 行开始)

promiseArray.push(new Promise((resolve, reject) => {
    const url = 'https://www.instagram.com/' + INSTAGRAM_USERNAME + '/?__a=1';
    core.info("url is");
    core.info(url);
    http.get(url, (response) => {
        let chunks_of_data = [];
        response.on('data', (fragments) => {
            chunks_of_data.push(fragments);
        });

        response.on('end', () => {
            let response_body = Buffer.concat(chunks_of_data);
            core.info(response_body.toString());
            let responseJSON = JSON.parse(response_body.toString());
            resolve((responseJSON.graphql.user.edge_followed_by.count).toString());
        });

        response.on('error', (error) => {
            reject(error);
        });
    });
}));

然后我正在处理它:

Promise.allSettled(promiseArray).then((results) => {
    results.forEach((result, index) => {
        if (result.status === 'fulfilled') {
            // Succeeded
            //   core.info(runnerNameArray[index] + ' runner succeeded. Post count: ' + result.value.length);
            // postsArray.push(result.value);
            instagram_followers = result.value;
        } else {
            jobFailFlag = true;
            // Rejected
            //core.error(runnerNameArray[index] + ' runner failed, please verify the configuration. Error:');
            core.error(result.reason);
        }
    });
}).finally(() => {
    try {
        const followers = instagram_followers;
        const readmeData = fs.readFileSync(README_FILE_PATH, 'utf8');
        // core.info(readmeData);
        const shieldURL = "https://img.shields.io/badge/ %40 " + INSTAGRAM_USERNAME + "-" + followers + "-%23E4405F?style=for-the-badge&logo=instagram";
        const instagramBadge = "<img align='left' alt='instagram-followers' src='" + shieldURL + "' />";
        const newReadme = buildReadme(readmeData, instagramBadge);
        // core.info(newReadme);
        // if there's change in readme file update it
        if (newReadme !== readmeData) {
            core.info('Writing to ' + README_FILE_PATH);
            fs.writeFileSync(README_FILE_PATH, newReadme);
            if (!process.env.TEST_MODE) {
                // noinspection JSIgnoredPromiseFromCall
                commitReadme();
            }
        } else {
            core.info('No change detected, skipping');
            process.exit(0);
        }
    } catch (e) {
        core.error(e);
        process.exit(1);
    }
});

但是当我运行这个动作时,它给出了这个错误:

这意味着 response_body 不是完整的 JSON 响应,但对 https://www.instagram.com/USERNAME/?__a=1 的请求确实发送了 json 响应。

【问题讨论】:

  • 更新:我正在删除 github 存储库。基本上 insta 不会让我从 github 网络访问数据。因此,我必须创建一个 fb 应用程序,一个 instagarm 应用程序,将自己添加为测试人员,授权自己,获取代码,然后将代码交换为短暂的授权令牌(仅一个小时有效)并使用此令牌来获取追随者。我可以获得一个长寿命的令牌,但它的有效期为 2 个月,这意味着我必须在它过期之前刷新它。所有这些只是为了获得关注者的数量似乎不合理,所以我放弃了这个项目(这是为 GH 自述文件创建 IG 关注者徽章

标签: node.js http github-actions


【解决方案1】:

更新

基本上每次您点击该端点时,它都会返回登录 html 页面,这会导致 json 解析失败。看来您可能需要使用要求您在从用户那里获取信息之前进行身份验证的 api。或者找出其他的抓取方法。

我可以通过跳转到一个 vpn 和私人浏览器在我的本地电脑上重现这个故障。当我点击端点时,它把我带到了登录屏幕。当我通过终端中的 curl 到达端点时,它什么也没返回。但是当我离开vpn时,一切正常。我认为它在您的本地工作的原因是因为浏览器中发生了一些缓存,而您可能不在 vpn 中。我认为在 vpn 上会发生一些网络黑名单。我不知道 github 托管网络,所以如果您想了解更多信息,我建议您向他们开一张票。

这里是用于快速参考的 instagram api 文档 https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

预览回复:留在这里供其他用户将来参考。

您没有传递用户名,因此它尝试使用空用户名查询端点

您需要调用您的操作并为其提供所需的参数,而不是仅在您的操作中运行 node index.js

  - name: Your github action
    uses: ./ # Uses an action in the root directory
    with:
      username: '_meroware'
   

然后你的代码会选择正确放置

  const INSTAGRAM_USERNAME = core.getInput('username');
  const url = 'https://www.instagram.com/' + INSTAGRAM_USERNAME + '/?__a=1';

资源: https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action

【讨论】:

  • 没有。我正在传递用户名。检查github.com/ashawe/instagram-followers/blob/main/.github/… 这是我使用该操作的地方。并检查动作的 index.js 的第 84 行 github.com/ashawe/actions-check/blob/…
  • @ashawe 感谢您分享您的代码,它有助于更​​轻松地调试问题。我认为这是一个身份验证问题,详细信息在响应中。
  • 哦!感谢您引起我的注意,我尝试在台式机和手机上的私有浏览器中使用该端点,它似乎工作正常。当我按照你所说的使用 VPN 进行尝试时,它把我带到了一个登录页面。我现在将尝试使用 API 密钥!谢谢
  • API 要我向用户询问用户的访问令牌,然后它将提供用户信息。所以基本上,我既不能直接也不能通过 api(未经授权)获得关注者数量。所以,我想我现在只能刮了。更新:使用 VPN 时,它也不会让我看到配置文件。想知道该怎么做
猜你喜欢
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 2023-02-24
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多