如何使用PHP/cURL连接到私有GitHub repo并下拉文件?

如何使用PHP/cURL连接到私有GitHub repo并下拉文件?,php,curl,github,oauth-2.0,access-token,Php,Curl,Github,Oauth 2.0,Access Token,我试图使用PHP/cURL连接到我创建的私有GitHub repo,并从该repo中提取文件 我从根本上了解如何在PHP中发出cURL请求,如何在请求中发送标题,等等。我还可以使用GitHub API的基本结构获取文件等。例如,我了解以下API页面的基本请求结构: 然而,我所面临的困难是下一页概述的身份验证: 如何获得Oauth 2令牌?页面或任何相关文档上都没有真正的解释。 另外,我假设我可能需要某种特殊类型的密钥,可能是用来证明我有权访问我试图访问的私人回购协议的令牌,但我也不确定该怎么

我试图使用PHP/cURL连接到我创建的私有GitHub repo,并从该repo中提取文件

我从根本上了解如何在PHP中发出cURL请求,如何在请求中发送标题,等等。我还可以使用GitHub API的基本结构获取文件等。例如,我了解以下API页面的基本请求结构:

然而,我所面临的困难是下一页概述的身份验证:

如何获得Oauth 2令牌?页面或任何相关文档上都没有真正的解释。 另外,我假设我可能需要某种特殊类型的密钥,可能是用来证明我有权访问我试图访问的私人回购协议的令牌,但我也不确定该怎么做

如果我能得到令牌,可能还有私有回购的API密钥,那么我想我可以发出请求并做我需要做的事情,但是令牌的生成/使用过程非常不清楚。 有没有人能提供一些关于如何处理这个问题的指导? 多谢各位

编辑/答复:

再次感谢Adolfo Eloy解释了如何做到这一点

根据他的建议,我最终进入了我的个人资料设置,单击开发者设置、个人访问令牌、生成新令牌,然后单击repo的顶部复选框以获得私有repo的完全权限

完成后,我复制了生成的访问密钥并将其粘贴到Postman中,如下所示: 我添加了一个带有密钥授权和token-generated-token-string值的新头

然后,我向以下URL发出请求: 用户名/回购协议名称

从那时起,我就可以使用GithubAPI来获得我所需要的东西。
希望这能帮助其他陷入同样困境的人。

首先,您需要访问,以便注册OAuth2应用程序。然后,你必须用你的应用程序信息填写注册表,比如你的应用程序的名称和url。现在最重要的字段是授权回调URL。GitHub将使用此URL将您或应用程序的用户重定向到以前注册的应用程序

填写完所有字段后,单击Register Application,GitHub将提供客户机凭据,即客户机id和客户机机密值

复制这些凭据以组装授权URL以开始请求访问令牌。看看我在下面构建的授权URL,在我的例子中,我使用的是由DAAAA75D1C77526E9标识的客户机id,当然我认为这个客户机id不存在

https://github.com/login/oauth/authorize?client_id=daaaaaa75d1c77526e9
&scope=gist&state=xdfads2342&allow_signup=false
&redirect_uri=http://localhost:8080/callback
发送的参数详细如下:

curl -H "Authorization: Bearer 23424234234324324lkj23l4kj32" "http://api.github.com/gists/public"
客户id:您注册的应用程序的id 作用域:您请求的GitHub权限GitHub在以下位置为您提供所有可用的作用域: 状态:一个随机生成的数字,您必须在应用程序中使用它来避免CSRF攻击,以便更好地理解为什么您可以阅读OAuth 2.0规范-RFC 6749 允许注册:在GitHub文档中有更好的解释 redirect_uri:应用程序的uri,用于接收授权代码,在用户授权使用其资源的情况下,可能会提供授权代码。 如果授权阶段成功运行,则以下URL可能会以不同的代码和状态值显示在web浏览器上:

http://localhost:8080/callback?code=24234324324234&state=xdfads2342
现在,您所要做的就是使用cURL工具向/login/oauth/access_token端点发送POST请求,请求访问令牌,如下所示:

curl -X POST "https://github.com/login/oauth/access_token" 
-d "client_id=daaaaaa75d1c77526e9&client_secret=blablablabla
&code=24234324324234&state=xdfads2342 
&redirect_uri=http://localhost:8080/callback"
当然,您应该在终端上使用不同的访问令牌接收以下结果:

access_token=23424234234324324lkj23l4kj32&scope=gist&token_type=bearer
现在,要使用此访问令牌,您必须声明http头,如下所示:

curl -H "Authorization: Bearer 23424234234324324lkj23l4kj32" "http://api.github.com/gists/public"

阿道夫,非常感谢你给我这个非常彻底的回答。这很有道理。我只希望GitHub能在他们自己的文档中解释这类事情。我仍然对redirect_url和我的用例使用的最佳值有点困惑。具体来说,在我的例子中,我将使用GitHub repo作为一个中央存储库,通过一个脚本每天调用GH repo来检查各种事情,从而与代码库的其他远程副本同步。为此,我每次都需要获取一个OAuth2令牌,但我是否仍然需要指定回调URL?或者,如果我必须这样做,我应该使用什么样的URL?我是否需要为处理这些OAuth2请求而使用不同的服务器,并使用它自己的URL?再一次,对那部分有点困惑。谢谢。此url的设计目的是允许我们的应用程序接收用户的授权。因此,它依赖于客户端应用程序、Github和用户之间的交互过程。按照您希望使用GitHub的方式,似乎最好使用另一种策略注册您的应用程序。在开发者设置中,您可以使用Github应用程序的其他两种不同方法注册您的应用程序或生成pers
个人访问令牌。我相信你不会每次都需要创建一个新的令牌。阿道夫,这是一个没有双关语意图的关键!非常感谢你。我在我的个人资料下进入开发者设置,生成了一个个人访问令牌,可以访问私有存储库,通过将授权头设置为令牌字符串,我可以向repo发出请求。非常感谢。