ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV
-
Хе-хе, я понимаю. Всё сводится к следующим шагам: 1. Распечатайте URL-адрес, на который вы отправляете сообщение. Это позволит понять, что происходит с вашим кодом. Но я попробую написать это для вас: for object in objectsfile: del_data = { object["objectid"] } В этом фрагменте вы создаете
набор
элементов.
del_data
теперь будет выглядеть так: del_data = {'first element', 'second element', 'third element'} Затем вы пробегаете по этому набору: for object in del_data: del_url = server + api_path + object И затем вы
выходите
из цикла. Итак, что происходит: # first loop
del_url = 'first_element'second loop
del_url = 'second_element'
third loop
del_url = 'third_element' Теперь следующее, что вы делаете, — это выполняете свой код: try: r = requests.delete(del_url, headers=headers, verify=False) Но, как вы видите, вы не делаете это
внутри
цикла
for
. Поэтому это происходит только один раз. Если мы посмотрим на этот запрос повнимательнее, то
del_url
— это
third_element,
и я
предполагаю
, что вы действительно хотели, чтобы это происходило для каждого элемента в вашем наборе: try: r = requests.delete('third_element', headers=headers, verify=False) Итак, я написал выше, что вам следует сделать так: for object in del_data: del_url = server + api_path + object try: r = requests.delete(del_url, headers=headers, verify=False) выглядело так: for object in del_data: del_url = server + api_path + object try:
print(del_url)
r = requests.delete(del_url, headers=headers, verify=False) Это гарантирует, что для
каждого
элемента в вашем наборе
del_data
вы будете выполнять эту команду. 2. Не называйте свои переменные
object
, это недопустимое имя для использования в Python, поскольку это встроенный класс. -
@JonasKs Спасибо, я написал свой пост с обновлением, не видя этого обновления (на написание поста у меня ушло много времени). Это очень поможет. Я еще раз посмотрю.
-
Я просмотрел дополнительную справку и разобрался с частью, касающейся удаления. Мне просто нужно было отступить: for element in del_data: del_url = server + api_path + element try: чтобы он работал под: for element in elementsfile: del_data = { element["objectid"], } f = open("del-hostid.csv") elementsfile = csv.DictReader(f) for element in elementsfile: del_data = { element["objectid"], } for element in del_data: del_url = server + api_path + element try: print(del_url) r = requests.delete(del_url, headers=headers, verify=False) status_code = r.status_code resp = r.text log = open('delete_objects.log', 'a') print(" Status code: "+str(status_code)) json_resp = json.loads(resp) log.write('\n=====\n') log.write(json.dumps(json_resp,sort_keys=True,indent=4, separators=(',', ': '))) if status_code == 201 or status_code == 202: print(" УСПЕХ ") elif status_code == 400: print((" Сообщение: ")+ resp + ('\n')) else: r.raise_for_status print((" Сообщение: ")+ resp + ('\n')) except requests.exceptions.HTTPError as err: print("Ошибка соединения -> "+str(err)) finally: if r: r.close
-
Я обновил свой код, чтобы отразить предложенные изменения, и теперь могу удалить один объект из файла csv. Это большое улучшение, спасибо. Но удаляется только последний объект в моем файле csv. Кроме того, если есть объект, который уже удален, скрипт завершается и выдает ошибку 404. Мои попытки обновить операцию error msg с 400 на 404 (elif status_code == 404:) для устранения ошибки 404 приводят к ошибке: Ошибка: Код статуса: 404
Сообщение: {"error":{"category":"FRAMEWORK","messages":[{"description":"No resource found"}],"severity":"ERROR"}} Но когда мой скрипт заканчивается из-за того, что объект уже удален, я получаю ошибку 404: Ошибка: Код статуса: 404 Ошибка
соединения -> 404 Ошибка клиента: Не найдено для url:
https://v-uxfmc01.brunel.ac.uk/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts/005056A6-6972-0ed3-0000-090194314100 При использовании этой операции в моем рабочем объекте POST из скрипта csv скрипт продолжал работу после объекта, который уже существовал. Поэтому я снова прошу о помощи... Во-первых, чтобы понять, почему используется только последний объект в моем csv, и как заставить его удалить все объекты в файле? и Как продолжить работу после объекта, который больше не существует? Большое спасибо всем за помощь, без вас я бы не дошел до этого. Обновленный скрипт f = open("del-hostid.csv")
elementsfile = csv.DictReader(f) for element in elementsfile:
del_data = {
element["objectid"],
} for element in del_data:
del_url = server + api_path + element
try:
r = requests.delete(del_url, headers=headers, verify=False)
status_code = r.status_code
resp = r.text
log = open('delete_objects.log', 'a')
print(" Статус-код: "+str(status_code))
json_resp = json.loads(resp)
log.write('\n=====\n')
log.write(json.dumps(json_resp,sort_keys=True,indent=4, separators=(',', ': ')))
if status_code == 201 or status_code == 202:
print(" SUCCESS ")
elif status_code == 400:
print((" Message: ")+ resp + ('\n'))
else:
r.raise_for_status
print((" Message: ")+ resp + ('\n')) except requests.exceptions.HTTPError as err:
print("Ошибка соединения -> "+str(err))
finally:
if r: r.close print('\nФайл журнала "delete_objects.log" добавлен\n')
input("Нажмите <Enter>, чтобы вернуться к командной строке CMD") -
@JonasKs
Отличная помощь, спасибо Я пробовал это, но не сработало. Оказалось, что сбой обработки сообщений был вызван неправильным отступом, который прервал цикл моего скрипта по обработке файла csv. -
Ага, да, 4 пробела на отступ — это то, что нужно. Я действительно рекомендую использовать редактор, который помогает увидеть такие вещи, например PyCharm или Visual Studio Code с плагинами Python. Рад, что вы решили эту проблему.
-
У меня остался один вопрос, если кто-нибудь может помочь с ним, было бы замечательно: Если есть объект, который уже удален, скрипт завершается и выдает ошибку 404. Мои попытки обновить операцию error msg с 400 на 404 (elif status_code == 404:) для устранения ошибки 404 приводят к ошибке: Ошибка: Код статуса: 404
Сообщение: {"error":{"category":"FRAMEWORK","messages":[{"description":"No resource found"}],"severity":"ERROR"}} Но когда мой скрипт заканчивается из-за того, что объект уже удален, я получаю ошибку 404: Ошибка: Код состояния: 404 Ошибка
соединения -> 404 Ошибка клиента: Не найдено для URL:
https://v-uxfmc01.brunel.ac.uk/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts/005056A6-6972-0ed3-0000-090194314100 При использовании этой операции в моем рабочем объекте POST из скрипта csv скрипт продолжал работу после объекта, который уже существовал. Кто-нибудь знает, как исправить мою проблему с проходом мимо объекта, который больше не существует? Заранее спасибо. -
Кстати, если вы нажмете
«Ответить»,
а затем кнопку
«Вставить код»,
нам будет проще прочитать ваш код.

-
Я этого не знал. Спасибо.
-
f = open("del-hostid.csv")
elementsfile = csv.DictReader(f) for element in elementsfile: del_data = { element["objectid"], } for element in del_data: del_url = server + api_path + element try: print(del_url) r = requests.delete(del_url, headers=headers, verify=False) status_code = r.status_code resp = r.text log = open('delete_objects.log', 'a') print(" Status code: "+str(status_code)) json_resp = r.json log.write('\n=====\n') log.write(json.dumps(json_resp,sort_keys=True,indent=4, separators=(',', ': '))) if status_code == 201 or status_code == 202: print(" SUCCESS ") elif status_code == 400 or status_code == 404: print(" Message: " + resp + '\n') else: r.raise_for_status print(" Message: " + resp + '\n') except requests.exceptions.HTTPError as err:This will only happen if the
r.raise_for_statusline is hit print("Connection error -> "+str(err)) Попробуй это. Я изменился elif status_code == 400: на elif status_code == 400 or status_code == 404: и json_resp = json.loads(resp) на json_resp = r.json , а также удалил ваш двойной цикл for.
Здравствуйте! Похоже, вам интересна эта беседа, но у вас пока нет учетной записи.
Вы устали просматривать одни и те же посты каждый раз, когда заходите на сайт? После регистрации, вам не придётся искать обсуждения в которых вы принимали участие, настройте уведомления о новых сообщениях так как вам это удобно (по электронной почте или уведомлением). У вас появится возможность сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост может стать ещё лучше 💗
Зарегистрироваться Войти