如何通过Bitbucket Server API获取YAML文件?
如何通过Bitbucket Server API获取YAML文件?
嘿,我来帮你搞定这个问题!你现在的代码之所以输出的不是预期的YAML格式,是因为你调用的/browse API端点返回的是文件浏览元数据(比如分页信息、每一行的内容结构),而不是直接的原始文件内容。你把这些元数据直接转成YAML,自然就不是你想要的docker-compose.yml本身的格式了。
下面给你两种可行的解决方案:
方案一:直接调用获取原始文件的API端点
Bitbucket Server提供了专门获取原始文件内容的API,路径是/rest/api/latest/projects/{projectKey}/repos/{repoSlug}/raw/{filePath}。用这个端点请求,能直接拿到文件的原始文本,不需要处理JSON结构。
示例代码:
import requests import yaml # 替换为你的实际API地址(把原来的browse换成raw) raw_file_url = 'https://our-company-bitbucket-url.io/rest/api/latest/projects/our-project/repos/our-repo/raw/reporting-distribution-resources/src/main/resources/docker/docker-compose.yml' headers = {'Authorization': 'Bearer SUPERSECRETAUTHENTICATIONTOKEN69'} response = requests.get(raw_file_url, headers=headers) # 检查请求是否成功 if response.status_code == 200: # 直接拿到原始YAML文本,打印出来就是你要的格式 compose_content = response.text print(compose_content) # 如果需要把YAML文本转成Python对象再处理,也可以这样做 # compose_data = yaml.safe_load(compose_content) # 之后可以根据需求修改数据,再转成YAML字符串 # print(yaml.dump(compose_data, sort_keys=False)) else: print(f"请求失败啦,状态码: {response.status_code}")
方案二:从现有返回结果中提取拼接内容
如果因为某些限制不能更换API端点,那也可以从当前返回的JSON数据里,把lines数组中每一项的text字段提取出来,再拼接成完整的YAML文本。
示例代码:
import requests import yaml url = 'https://our-company-bitbucket-url.io/rest/api/latest/projects/our-project/repos/our-repo/browse/reporting-distribution-resources/src/main/resources/docker/docker-compose.yml' headers = {'Authorization': 'Bearer SUPERSECRETAUTHENTICATIONTOKEN69'} # 获取API返回的JSON数据 response_data = requests.get(url, headers=headers).json() # 提取每一行的text并拼接成完整的YAML内容 compose_content = '\n'.join(line['text'] for line in response_data['lines']) print(compose_content) # 同样,如果需要转成Python对象处理,用yaml.safe_load即可 # compose_data = yaml.safe_load(compose_content)
简单总结一下:你之前的代码把包含分页、行结构的整个JSON对象转成了YAML,所以输出的是这些元数据的格式,而不是文件本身。上面两种方法都能帮你拿到真正的YAML文件内容~
备注:内容来源于stack exchange,提问作者Haverknol
相关产品推荐
相关产品推荐

