You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取GitLab子文件夹内文件信息时遭遇404错误问题

解决GitLab子文件夹文件404问题

核心问题定位

确实如你判断,问题出在代码仅获取了子文件夹的目录信息,没有递归遍历子文件夹内部的文件,或者请求文件时的路径拼接错误,导致GitLab API无法定位资源返回404。

具体修复方案

  • 递归获取全量文件信息
    调用GitLab API的projects/:id/repository/tree接口时,添加recursive=true参数,可一次性拉取所有层级的文件和文件夹,无需手动递归处理:

    import requests
    
    GITLAB_TOKEN = "你的访问令牌"
    PROJECT_ID = "目标项目ID"
    
    def fetch_all_repo_items():
        api_url = f"https://gitlab.com/api/v4/projects/{PROJECT_ID}/repository/tree"
        request_params = {
            "recursive": "true",
            "access_token": GITLAB_TOKEN
        }
        resp = requests.get(api_url, params=request_params)
        resp.raise_for_status()
        return resp.json()
    
    # 获取所有目录项并过滤出文件
    all_items = fetch_all_repo_items()
    file_list = [item for item in all_items if item["type"] == "blob"]
    
  • 正确拼接文件访问路径
    获取到文件的path后,使用projects/:id/repository/files/:file_path/raw接口访问内容,注意对文件路径做URL编码:

    import urllib.parse
    
    def get_file_raw_content(file_path):
        encoded_path = urllib.parse.quote(file_path, safe='')
        file_api_url = f"https://gitlab.com/api/v4/projects/{PROJECT_ID}/repository/files/{encoded_path}/raw"
        resp = requests.get(file_api_url, params={"access_token": GITLAB_TOKEN})
        resp.raise_for_status()
        return resp.text
    
    # 示例:遍历子文件夹内的文件并获取内容
    for file in file_list:
        if "subfolder/" in file["path"]:
            content = get_file_raw_content(file["path"])
            print(f"文件 {file['path']} 预览:{content[:100]}...")
    
  • 校验令牌权限
    确认你的GitLab访问令牌已勾选read_repository权限,无此权限时即使路径正确也会返回404,可在GitLab个人设置的「访问令牌」页面调整权限。

验证方式

运行代码后打印所有文件的path,确认子文件夹内的文件已被纳入列表,再尝试请求几个文件的内容,检查是否能正常返回。

内容的提问来源于stack exchange,提问作者Parvus kötü adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:33:30