Ошибка Python, передающая vaiable в полезную нагрузку 400

#python #http #lambda

#python #http #лямбда

Вопрос:

Привет, я пытаюсь перебрать некоторые значения в цикле for в python3.8 (lambda), чтобы создать несколько переменных bitbucket pipline. Для начала, просто чтобы доказать, что мой код работает, я запускаю следующее, которое проходит цикл из 2 значений, создает переменную с именем «acc» и выдает 201 ответ, а затем во второй раз в цикле переменная acc уже существует, поэтому она возвращает 409, что отлично, поскольку я ожидаю, что

 accounts=['123', '12345']

for acc in accounts:
    http = urllib3.PoolManager()
    payload='{"key": "acc","value":"apply","secured":"false"}'
    data = payload
    url = 'https://api.bitbucket.org/2.0/repositories/<workspace>/<project>/pipelines_config/variables/'
    headers = urllib3.util.make_headers(basic_auth='user'   ':'   'Password')
    print(headers)
    headers['Content-type'] = 'application/json'
    print(headers)
    
    r = http.request('POST', url, headers=headers, body=data)
  

теперь, если я изменю «acc» в полезной нагрузке, чтобы она фактически была переменной, которую я передаю, она завершается ошибкой 400.

 accounts=['123', '12345']

for **acc** in accounts:
    http = urllib3.PoolManager()
    payload='{"key": "'  acc  '","value":"apply","secured":"false"}'
    data = payload
    url = 'https://api.bitbucket.org/2.0/repositories/<workspace>/<project>/pipelines_config/variables/'
    headers = urllib3.util.make_headers(basic_auth='user'   ':'   'Password')
    print(headers)
    headers['Content-type'] = 'application/json'
    print(headers)
    
    r = http.request('POST', url, headers=headers, body=data)
  

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

как я могу передать переменную из цикла в эту полезную нагрузку?

Ответ №1:

Может быть, я просто не понимаю, но почему бы вам просто не использовать свою переменную acc вместо того, чтобы превращать ее в строку в вашем первом примере?

 accounts=['123', '12345']

for acc in accounts:
    http = urllib3.PoolManager()
    payload='{"key": "'  acc  '","value":"apply","secured":"false"}'
    data = payload
...
  

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

1. спасибо за ответ. Попытка передать var с использованием «‘ acc ‘» приводит к ошибке 400 ниже 400 {‘error’: {‘message’: ‘Неверный запрос’, ‘detail’: ‘Тело запроса содержит недопустимые свойства’, ‘data’: {‘key’: ‘variable-service.request.validation-ошибка’, ‘arguments’: {}}}} Идентификатор КОНЕЧНОГО запроса: 880f3a2e-239d-4f0a-a3b6- 9dce55f47777

Ответ №2:

Я только что понял это после нескольких часов попыток. BitBucket не позволяет переменным начинаться с чисел. было бы неплохо, если бы в их документации это, конечно , было указано !