Azure DevOps: как загрузить файл из git с помощью REST API?

Следуя примеру здесь: https://docs.microsoft.com/en-us/rest/api/azure/devops/git/items/get?view=azure-devops-rest-6.1

Я могу запросить организацию по разработке и получить такой ответ:

{
  "count": 1,
  "value": [
    {
      "objectId": "61a86fdaa79e5c6f5fb6e4026508489feb6ed92c",
      "gitObjectType": "blob",
      "commitId": "23d0bc5b128a10056dc68afece360d8a0fabb014",
      "path": "/MyWebSite/MyWebSite/Views/Home/_Home.cshtml",
      "url": "https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items/MyWebSite/MyWebSite/Views/Home/_Home.cshtml?versionType=Branch&versionOptions=None"
    }
  ]
}

Как я могу использовать Python, я думаю, для загрузки этого URL-адреса? Файл должен быть XML-файлом. Я хочу прочитать (скачать) его прямо из Python.

Если я возьму url, возвращенное выше, и вставлю его в еще один запрос GET, я буду отправлен в цикле.

Редактировать:

Я понял, что если я вставлю URL-адрес, который он мне дает, я смогу загрузить файл с помощью своего веб-браузера. Однако, когда я вставляю тот же URL-адрес в новый request, я снова и снова получаю одни и те же метаданные, пытаясь:

response = requests.get(url=(url), headers=headers, stream=True)
response.text
response.content

response = requests.get(url=(url), headers=headers, stream=False)
response.text
response.content

Отвечает ли это на ваш вопрос? Как скачать файл по HTTP?

Agnel Kurian 18.03.2022 02:44

Нет, даже если я вставлю url в очередной GET-запрос, я получу больше URL-адресов.

John Stud 18.03.2022 03:16

Похоже, вы не меняете переменную url, поэтому я ожидаю, что содержимое будет таким же?

sytech 18.03.2022 06:04

Я меняю переменную, это просто иллюстрация отключения/включения потока как одной из возможных причин.

John Stud 18.03.2022 12:37

Глядя на документацию, которой вы поделились, кажется, что вам нужно установить для параметра download значение true.

Agnel Kurian 18.03.2022 14:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил проблему, так как оба комментария и предыдущий ответ неверны и не приведут вас к правильному ответу для будущих посетителей.

Следуя приведенному здесь примеру, как было первоначально опубликовано, предполагается, что download=True: https://docs.microsoft.com/en-us/rest/api/azure/devops/git/items/get?view=azure-devops-rest-6.1

Однако затем вам нужно запросить интересующий файл и установить этот флаг: &includeContent=true, чтобы фактически получить содержимое файла из GIT devops.

Вот так:

https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml&includeContent=true&api-version=6.1-preview.1

или вы отправите столько GET-запросов, сколько захотите, и не получите взамен ничего ценного.

Другие вопросы по теме