Выполнение нескольких HTTP-запросов к Okta API через requests python lib

#python

#python

Вопрос:

Я относительно новичок в программировании за пределами сценариев bash, поэтому буду признателен за любые советы.

Я работаю над скриптом на Python для вызова Okta Group API, по сути, для создания списка групп через файл yaml.

Для этого я использую библиотеку запросов и for цикл. Скрипт выполняет только последний элемент, который я передаю из файла yaml. Я неправильно использую цикл for?

 #!/usr/bin/env python3

import requests
import yaml

url = "https://org.okta.com/api/v1/groups"

headers = {
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization" : "SSWS AUTHKEY",
  "User-Agent" : "Custom-Python-Agent"
}

with open(r'groups.yaml') as file:
    documents = yaml.full_load(file)

for okta_groups in documents['profile']['groups']:
    body = {'profile': {'name': okta_groups['name'], 'description': okta_groups['description']} }

r = requests.post(url, headers=headers, json=body)
print(r)
  

Файл YAML:

 profile:
  groups:
    - name: aws#test#api#001
      description: test description 1
    - name: aws#test#api#002
      description: test description 2
    - name: aws#test#api#003
      description: test description 3
  

Спасибо!

Комментарии:

1. Потому что вы обновляете «body» много раз и используете его только для выполнения 1 запроса в самом конце. Вы должны сделать отступ «r = requests …» и инструкцию print, чтобы они находились внутри цикла.

Ответ №1:

Просто сделайте отступ в этих:

 r = requests.post(url, headers=headers, json=body)
print(r)
  

Чтобы быть внутри цикла:

 for okta_groups in documents['profile']['groups']:
   body = {'profile': {'name': okta_groups['name'], 'description': okta_groups['description']} }

   r = requests.post(url, headers=headers, json=body)
   print(r)
  

Таким образом, вы будете отправлять запрос для каждого экземпляра «body», а не только для последнего.