Я пытаюсь создать скрипт Python, который будет сканировать файл проекта Azure DevOps и загружать его локально. Однако я столкнулся с проблемой, из-за которой запрос на загрузку файла не работает, поскольку запрос является «опасным».
Ошибка:< /p>
Failed to clone file 'mkdocs.yml' from repository 'crawl-ado'
Response: 400
{"$id":"1","innerException":null,"message":"A potentially dangerous Request.Path value
was detected from the client (:).","typeName":"System.Web.HttpException,
System.Web","typeKey":"HttpException","errorCode":0,"eventId":0}
Моя текущая стратегия — получить список репозиториев через токен Azure PAT и сделать запрос json, чтобы проверить, являются ли эти репозитории содержать файл. Если да, я хочу создать новый файл и загрузить его в свою локальную среду. Что-то не так с моей логикой, или я пытаюсь сделать что-то подобное неправильно? Заранее спасибо!
crawl.py:
import os
import requests
import base64
from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication
# Replace these variables with your Azure DevOps organization, project, and personal access token (PAT)
organization = "https://dev.azure.com/MYORG"
project = os.getenv('PROJECT')
pat = os.getenv('PAT')
file_path = "mkdocs.yml" # Replace with the path to the specific file you want to clone
# Check to see if PROJECT & PAT are set.
if not project:
print("Please set the PROJECT environment variable!")
exit(1)
if not pat:
print("Please set the PAT environment variable!")
exit(1)
else:
print("PAT is set!")
print("***************************************")
# Create a connection to the Azure DevOps organization
credentials = BasicAuthentication('', pat)
connection = Connection(base_url=organization, creds=credentials)
# Get a client for the Git service
git_client = connection.clients.get_git_client()
# Get a list of repositories in the project
repos = git_client.get_repositories(project=project)
# Store the repository names in an array
repo_names = [repo.name for repo in repos]
# Display the repository names and download the file from each repository
print("Repositories in project '{}':".format(project))
for repo_name in repo_names:
print(repo_name)
url = f'https://dev.azure.com/{organization}/{p ... ersion=7.1'
headers = {
'Authorization': f'Basic {base64.b64encode(f":{pat}".encode()).decode()}'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
file_content = response.text
with open(file_path, 'w') as file:
file.write(file_content)
print(f"File '{file_path}' cloned successfully from repository '{repo_name}'")
else:
print(f"Failed to clone file '{file_path}' from repository '{repo_name}'")
print(f"Response: {response.status_code}")
print(response.text)
Подробнее здесь: https://stackoverflow.com/questions/792 ... ownload-it
Скрипт Python для сканирования проекта ADO для конкретного файла и его загрузки ⇐ Python
Программы на Python
1734022715
Anonymous
Я пытаюсь создать скрипт Python, который будет сканировать файл проекта Azure DevOps и загружать его локально. Однако я столкнулся с проблемой, из-за которой запрос на загрузку файла не работает, поскольку запрос является «опасным».
[b]Ошибка:[/b]< /p>
Failed to clone file 'mkdocs.yml' from repository 'crawl-ado'
Response: 400
{"$id":"1","innerException":null,"message":"A potentially dangerous Request.Path value
was detected from the client (:).","typeName":"System.Web.HttpException,
System.Web","typeKey":"HttpException","errorCode":0,"eventId":0}
Моя текущая стратегия — получить список репозиториев через [b]токен Azure PAT[/b] и сделать [b]запрос json[/b], чтобы проверить, являются ли эти репозитории содержать файл. Если да, я хочу создать новый файл и [b]загрузить его в свою локальную среду[/b]. Что-то не так с моей логикой, или я пытаюсь сделать что-то подобное неправильно? Заранее спасибо!
[b]crawl.py:[/b]
import os
import requests
import base64
from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication
# Replace these variables with your Azure DevOps organization, project, and personal access token (PAT)
organization = "https://dev.azure.com/MYORG"
project = os.getenv('PROJECT')
pat = os.getenv('PAT')
file_path = "mkdocs.yml" # Replace with the path to the specific file you want to clone
# Check to see if PROJECT & PAT are set.
if not project:
print("Please set the PROJECT environment variable!")
exit(1)
if not pat:
print("Please set the PAT environment variable!")
exit(1)
else:
print("PAT is set!")
print("***************************************")
# Create a connection to the Azure DevOps organization
credentials = BasicAuthentication('', pat)
connection = Connection(base_url=organization, creds=credentials)
# Get a client for the Git service
git_client = connection.clients.get_git_client()
# Get a list of repositories in the project
repos = git_client.get_repositories(project=project)
# Store the repository names in an array
repo_names = [repo.name for repo in repos]
# Display the repository names and download the file from each repository
print("Repositories in project '{}':".format(project))
for repo_name in repo_names:
print(repo_name)
url = f'https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repo_name}/items?path={file_path}&api-version=7.1'
headers = {
'Authorization': f'Basic {base64.b64encode(f":{pat}".encode()).decode()}'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
file_content = response.text
with open(file_path, 'w') as file:
file.write(file_content)
print(f"File '{file_path}' cloned successfully from repository '{repo_name}'")
else:
print(f"Failed to clone file '{file_path}' from repository '{repo_name}'")
print(f"Response: {response.status_code}")
print(response.text)
Подробнее здесь: [url]https://stackoverflow.com/questions/79269321/python-script-to-crawl-ado-project-for-specific-file-and-download-it[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия