google API 的重复错误,但在 Pycharm 中有效

Replit error with google API but works in Pycharm

我正在学习本教程:https://developers.google.com/drive/api/v3/quickstart/python#trouble 我遵循了每一步(在创建凭据时遇到了一些麻烦,但它可以正常工作)但在最后一步,它给了我一个错误。在第 3.2 步,它说“a. 单击接受。该应用已获得访问您的数据的授权。”如果我通过 pycharm 运行 相同的脚本(python 的 IDE),一切正常,当我登录时,我在 chrome 上收到一条消息说“一切正常您可以关闭此网页”。但是,如果我在登录后在 replit 中执行此操作,则会出现此错误:

如果有人可以帮助我,那将很有帮助! (我是 api 的初学者所以请耐心等待)

所以问题出在登录后重定向回来。从错误消息中可以看出,localhost (see wiki) 拒绝了连接。这是非常符合预期的行为,因为它不是本地机器 运行 宁代码,而是你在使用 replit 时 运行 在云中宁它。

您正在使用的代码示例不能直接使用 replit。你可以做的是运行本地代码一次创建令牌文件并将其上传到replit。请注意,不建议使用此解决方案,但我将其包括在内以供您理解。

我说的具体代码段是:

        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

这部分在登录流程后创建一个 token.json 文件。如果此文件存在,则不使用登录流程,根据这部分代码:

    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)

实际解决方案

更好的解决方案是替换下面的代码:

            creds = flow.run_local_server(port=0)

使用以下代码:

            creds = flow.run_console()

如库 here 的文档中所述。

它的作用是打印出一个link,你需要在另一个浏览器window中访问它。它或多或少与 flow.run_local_server(port=0) 具有相同的登录流程,但它不会重定向到 localhost,而是生成一个代码,您需要将其粘贴到 replit 中。它应该是相当明显的,并且适用于您遇到的问题。

例如,当您远程进入只有命令行的云计算机时,可以使用此方法。 (fe. headless computer)