你好,欢迎来到Supaleyer的博客园啊

Gitee提供的API获取和更新私有仓库文件

🍓通过 Gitee 提供的 API 去更新和获取私有仓库的文件内容,您需要完成以下步骤:

1、获得 Gitee 的 Access Token

首先,需要获得 Gitee 的 Access Token。在 Gitee 上登录并转到个人设置页面,在左侧导航栏中选择「开发者设置」,然后点击「私人令牌」创建一个新的 Access Token。

   

2、Gitee API 参数设置

私人令牌访问官方文档:Gitee Open API

使用您喜欢的 HTTP 库(比如 HttpClient)构建 HTTP 请求,访问 Gitee API。对于更新和获取文件,您需要使用下面两个 API:

获取文件内容:https://gitee.com/api/v5/repos/{owner}/{repo}/contents/{path}(HTTP GET 请求)
更新文件内容:https://gitee.com/api/v5/repos/{owner}/{repo}/contents/{path}(HTTP PUT 请求)

3、构建 HTTP 请求并获取文件内容

  • 在构建 HTTP 请求时,需要指定以下信息:
    • Access Token:使用 HTTP 请求头将 Access Token 传递给 API。
    • 仓库信息:将 owner、repo 和 path 替换为您的仓库和文件路径。
  • 对于获取文件内容,API 的响应是一个 JSON 对象,其中包含文件内容的 Base64 编码。

    • Base64 解码可以使用 Convert.FromBase64String 方法。
  • 对于更新文件内容,API 的请求体需要是一个 JSON 对象,其中包含以下信息:

    • message:提交消息,必填。
    • content:文件内容的 Base64 编码。
    • sha:文件的 SHA 值,用于检查文件是否被其他人修改过。如果文件没有被修改过,可以将其设置为 null。

4、以下是一个获取和更新Gitee私有仓库文件内容的示例代码

using System;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main(string[] args)
    {
        string accessToken = "YOUR_ACCESS_TOKEN";
        string owner = "YOUR_GIT_REPO_OWNER";
        string repo = "YOUR_GIT_REPO_NAME";
        string path = "YOUR_FILE_PATH";
        
        // 获取文件内容
        string getContentUrl = $"https://gitee.com/api/v5/repos/{owner}/{repo}/contents/{path}";
        WebClient client = new WebClient();
        client.Headers.Add(HttpRequestHeader.Authorization, $"Bearer {accessToken}");
        client.Headers.Add(HttpRequestHeader.Accept, "application/vnd.github.v3.raw");
        string response = Encoding.UTF8.GetString(client.DownloadData(getContentUrl));
        JObject contentObj = JObject.Parse(response);
        string content = Encoding.UTF8.GetString(Convert.FromBase64String(contentObj["content"].ToString()));
        Console.WriteLine(content);
        
        // 更新文件内容
        string updateContentUrl = getContentUrl;
        string message = "Update file";
        string fileContent = "New file content";
        string base64Content = Convert.ToBase64String(Encoding.UTF8.GetBytes(fileContent));
        string sha = contentObj["sha"].ToString();
        string requestBody = $@"{{""message"":""{message}"",""content"":""{base64Content}"",""sha"":""{sha}""}}";
        client.Headers.Clear();
        client.Headers.Add(HttpRequestHeader.Authorization, $"Bearer {accessToken}");
        client.Headers.Add(HttpRequestHeader.Accept, "application/vnd.github.v3+json");
        client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
        client.UploadString(updateContentUrl, "PUT", requestBody);
    }
}

在以上代码中,我添加了 Accept 请求头以获取原始文件内容(即非 Base64 编码的文件内容)。在更新文件内容时,我还添加了 Accept 请求头以指定 API 的版本(v3)以及 ContentType 请求头以指定请求体的格式。

posted @ 2023-03-25 18:50  Supaleyer  阅读(2253)  评论(0编辑  收藏  举报