如何使用 PHP/cURL 连接到私有 GitHub 存储库并下载文件?
How do I use PHP/cURL to connect to a private GitHub repo and pull down files?
我正在尝试使用 PHP/cURL 连接到我创建的私有 GitHub 存储库并从该存储库中提取文件。
我从根本上了解如何在 PHP 中发出 cURL 请求,如何在请求中发送 headers 等。我对基本结构也很好GitHub API 用于抓取文件等。例如,我了解以下 API 页面的基本请求结构:
https://developer.github.com/v3/repos/contents/
但是,我遇到的问题是下一页概述的身份验证:
https://developer.github.com/v3/#authentication
如何获得 Oauth 2 令牌?页面或任何相关文档中都没有真正的解释。
另外,我假设我可能需要某种特殊类型的密钥(也许是令牌)来证明我有权访问我正在尝试访问的私人仓库,但我不确定该怎么做要么。
如果我可以获得令牌(可能还有私人仓库的 API 密钥),那么我想我可以发出请求并执行我需要做的事情,但是令牌 generation/usage过程很不清楚。
有人可以就如何处理这个问题提供一些指导吗?
谢谢。
Edit/Answer:
再次感谢 Adolfo Eloy 解释如何执行此操作。
根据他的建议,我最终转到我的个人资料设置,点击开发人员设置、个人访问令牌、生成新令牌,然后单击 repo 顶部的复选框以获得私有 repos 的全部权利。
之后,我复制了生成的访问密钥并将其粘贴到 Postman 中,如下所示:
我添加了一个新的 header 键 Authorization
和值 token generated-token-string
.
然后我向以下URL提出了请求:
https://api.github.com/repos/user-name/repo-name
从那里,我能够使用 GitHub API (https://developer.github.com/v3/) 来获得我需要的东西。
希望这会帮助其他陷入同样情况的人。
首先您需要访问 GitHub developers 以便注册 OAuth2 应用程序。然后,您必须使用您的应用程序信息填写注册表,例如您的应用程序的名称和 url。现在最重要的字段是 授权回调 URL。此 URL 将被 GitHub 用于将您(或您的应用程序的用户)重定向到您之前注册的应用程序。
填写所有字段后,单击“注册应用程序”,GitHub 将提供客户端凭据,这将是 client_id
和 client_secret
值。
将这些凭据复制到 assemble 授权 URL 以开始请求访问令牌。看看我在下面建立的授权 URL(在我的例子中,我使用的是 daaaaaa75d1c77526e9
标识的 client_id - 当然我认为这个客户端 ID 不存在)。
https://github.com/login/oauth/authorize?client_id=daaaaaa75d1c77526e9
&scope=gist&state=xdfads2342&allow_signup=false
&redirect_uri=http://localhost:8080/callback
发送的参数详细如下:
- client_id:你注册的应用id
- scope:您正在为 GitHub 请求的权限(GitHub 在 Available scopes 为您提供所有可用范围)
- state:一个随机生成的数字,你必须在你的应用程序中使用它来避免 CSRF 攻击(为了更好地理解为什么你可以阅读 OAuth 2.0 规范 - RFC 6749)
- allow_signup:在 GitHub 文档
中有更好的解释
- redirect_uri:您的应用程序的 URI,用于接收授权码,如果用户授权使用他的资源,可能会提供该授权码。
如果授权阶段运行成功,那么以下 URL 可能会出现在您的网络浏览器上(代码和状态的值不同):
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 header:
curl -H "Authorization: Bearer 23424234234324324lkj23l4kj32" "http://api.github.com/gists/public"
我正在尝试使用 PHP/cURL 连接到我创建的私有 GitHub 存储库并从该存储库中提取文件。
我从根本上了解如何在 PHP 中发出 cURL 请求,如何在请求中发送 headers 等。我对基本结构也很好GitHub API 用于抓取文件等。例如,我了解以下 API 页面的基本请求结构:
https://developer.github.com/v3/repos/contents/
但是,我遇到的问题是下一页概述的身份验证:
https://developer.github.com/v3/#authentication
如何获得 Oauth 2 令牌?页面或任何相关文档中都没有真正的解释。
另外,我假设我可能需要某种特殊类型的密钥(也许是令牌)来证明我有权访问我正在尝试访问的私人仓库,但我不确定该怎么做要么。
如果我可以获得令牌(可能还有私人仓库的 API 密钥),那么我想我可以发出请求并执行我需要做的事情,但是令牌 generation/usage过程很不清楚。
有人可以就如何处理这个问题提供一些指导吗?
谢谢。
Edit/Answer:
再次感谢 Adolfo Eloy 解释如何执行此操作。
根据他的建议,我最终转到我的个人资料设置,点击开发人员设置、个人访问令牌、生成新令牌,然后单击 repo 顶部的复选框以获得私有 repos 的全部权利。
之后,我复制了生成的访问密钥并将其粘贴到 Postman 中,如下所示:
我添加了一个新的 header 键 Authorization
和值 token generated-token-string
.
然后我向以下URL提出了请求:
https://api.github.com/repos/user-name/repo-name
从那里,我能够使用 GitHub API (https://developer.github.com/v3/) 来获得我需要的东西。
希望这会帮助其他陷入同样情况的人。
首先您需要访问 GitHub developers 以便注册 OAuth2 应用程序。然后,您必须使用您的应用程序信息填写注册表,例如您的应用程序的名称和 url。现在最重要的字段是 授权回调 URL。此 URL 将被 GitHub 用于将您(或您的应用程序的用户)重定向到您之前注册的应用程序。
填写所有字段后,单击“注册应用程序”,GitHub 将提供客户端凭据,这将是 client_id
和 client_secret
值。
将这些凭据复制到 assemble 授权 URL 以开始请求访问令牌。看看我在下面建立的授权 URL(在我的例子中,我使用的是 daaaaaa75d1c77526e9
标识的 client_id - 当然我认为这个客户端 ID 不存在)。
https://github.com/login/oauth/authorize?client_id=daaaaaa75d1c77526e9
&scope=gist&state=xdfads2342&allow_signup=false
&redirect_uri=http://localhost:8080/callback
发送的参数详细如下:
- client_id:你注册的应用id
- scope:您正在为 GitHub 请求的权限(GitHub 在 Available scopes 为您提供所有可用范围)
- state:一个随机生成的数字,你必须在你的应用程序中使用它来避免 CSRF 攻击(为了更好地理解为什么你可以阅读 OAuth 2.0 规范 - RFC 6749)
- allow_signup:在 GitHub 文档 中有更好的解释
- redirect_uri:您的应用程序的 URI,用于接收授权码,如果用户授权使用他的资源,可能会提供该授权码。
如果授权阶段运行成功,那么以下 URL 可能会出现在您的网络浏览器上(代码和状态的值不同):
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 header:
curl -H "Authorization: Bearer 23424234234324324lkj23l4kj32" "http://api.github.com/gists/public"