<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV]]></title><description><![CDATA[<p dir="auto">У меня есть полностью рабочий скрипт на Python, который может отправлять объекты в API FMC (6.5.0.4) с помощью файла .csv для данных. Я хочу использовать тот же подход/метод для удаления объектов, но после многих дней попыток мне так и не удалось заставить скрипт работать. Сначала я добавлял объект в скрипт в виде данных, а не в URL-адресе, но исправил это, используя<br />
один объект, если я добавляю объект в скрипт, используя: del_data = ['005056A6-6972-0ed3-0000-090194313992'] URL работает, и объекты удаляются. Но это противоречит цели скрипта, так как я могу удалить один объект более простыми способами. Я полагаю, что теперь у меня есть скрипт, который добавляет ID объекта хоста в URL, но он по-прежнему дает ошибку 404: Ошибка подключения --&gt;<br />
404 Ошибка клиента: не найдено для URL-адреса: https://<br />
&lt;FMC-NAME&gt;<br />
/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts/005056A6-6972-0ed3-0000-090194314504 Я новичок в сфере Python-скриптов и буду благодарен за любые советы. Ниже приведены части моего скрипта, имеющие отношение к данному вопросу: Заранее спасибо Компонент скрипта для создания URL<br />
f = open("delid.csv")<br />
objectsfile = csv.DictReader(f)<br />
for object in objectsfile:<br />
del_data = {<br />
object["objectid"]<br />
}<br />
for object in del_data:<br />
del_url = server + api_path + object<br />
try:<br />
r = requests.delete(del_url, headers=headers, verify=False)<br />
status_code = r.status_code<br />
resp = r.text<br />
log = open('delete_objects.log', 'a')<br />
print(" Status Code: "+str(status_code))<br />
json_resp = json.loads(resp)<br />
log.write(json.dumps(json_resp,sort_keys=True,indent=4, separators=(',', ': ')))<br />
if status_code == 201 or status_code == 202:<br />
print(" SUCCESS ")<br />
elif status_code == 400:<br />
print((" Сообщение: ")+ resp + ('\n'))<br />
else:<br />
r.raise_for_status<br />
print((" Сообщение: ")+ resp + ('\n'))<br />
except requests.exceptions.HTTPError as err:<br />
print("Ошибка соединения --&gt; "+str(err))<br />
finally:<br />
if r: r.close</p>
]]></description><link>https://sla247.ru/forum/topic/2232/ошибка-404-в-скрипте-python-для-удаления-объектов-из-fmc-с-помощью-файла-csv</link><generator>RSS for Node</generator><lastBuildDate>Thu, 14 May 2026 20:50:37 GMT</lastBuildDate><atom:link href="https://sla247.ru/forum/topic/2232.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Mar 2026 12:02:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:28 GMT]]></title><description><![CDATA[<p dir="auto">f = open("del-hostid.csv")<br />
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:</p>
<h1>This will only happen if the <code>r.raise_for_status</code> line is hit print("Connection error -&gt; "+str(err)) Попробуй это. Я изменился elif status_code == 400: на elif status_code == 400 or status_code == 404: и json_resp = json.loads(resp) на json_resp = r.json , а также удалил ваш двойной цикл for.</h1>
]]></description><link>https://sla247.ru/forum/post/15812</link><guid isPermaLink="true">https://sla247.ru/forum/post/15812</guid><dc:creator><![CDATA[JonasKs]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:27 GMT]]></title><description><![CDATA[<p dir="auto">Я этого не знал. Спасибо.</p>
]]></description><link>https://sla247.ru/forum/post/15811</link><guid isPermaLink="true">https://sla247.ru/forum/post/15811</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:26 GMT]]></title><description><![CDATA[<p dir="auto">Кстати, если вы нажмете<br />
«Ответить»,<br />
а затем кнопку<br />
«Вставить код»,<br />
нам будет проще прочитать ваш код. <img src="/forum/uploads/files/cisco/04b0ea236f490f5f865a86fe4e1df342b5fcb8c4.png" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/forum/uploads/files/cisco/04b0ea236f490f5f865a86fe4e1df342b5fcb8c4.png" alt="" class=" img-fluid img-markdown" /></p>
]]></description><link>https://sla247.ru/forum/post/15810</link><guid isPermaLink="true">https://sla247.ru/forum/post/15810</guid><dc:creator><![CDATA[JonasKs]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:25 GMT]]></title><description><![CDATA[<p dir="auto">У меня остался один вопрос, если кто-нибудь может помочь с ним, было бы замечательно: Если есть объект, который уже удален, скрипт завершается и выдает ошибку 404. Мои попытки обновить операцию error msg с 400 на 404 (elif status_code == 404:) для устранения ошибки 404 приводят к ошибке: Ошибка: Код статуса: 404<br />
Сообщение: {"error":{"category":"FRAMEWORK","messages":[{"description":"No resource found"}],"severity":"ERROR"}} Но когда мой скрипт заканчивается из-за того, что объект уже удален, я получаю ошибку 404: Ошибка: Код состояния: 404 Ошибка<br />
соединения -&gt; 404 Ошибка клиента: Не найдено для URL:<br />
<a href="https://v-uxfmc01.brunel.ac.uk/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts/005056A6-6972-0ed3-0000-090194314100" rel="nofollow ugc">https://v-uxfmc01.brunel.ac.uk/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts/005056A6-6972-0ed3-0000-090194314100</a> При использовании этой операции в моем рабочем объекте POST из скрипта csv скрипт продолжал работу после объекта, который уже существовал. Кто-нибудь знает, как исправить мою проблему с проходом мимо объекта, который больше не существует? Заранее спасибо.</p>
]]></description><link>https://sla247.ru/forum/post/15809</link><guid isPermaLink="true">https://sla247.ru/forum/post/15809</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:24 GMT]]></title><description><![CDATA[<p dir="auto">Ага, да, 4 пробела на отступ — это то, что нужно. Я действительно рекомендую использовать редактор, который помогает увидеть такие вещи, например PyCharm или Visual Studio Code с плагинами Python. Рад, что вы решили эту проблему.</p>
]]></description><link>https://sla247.ru/forum/post/15808</link><guid isPermaLink="true">https://sla247.ru/forum/post/15808</guid><dc:creator><![CDATA[JonasKs]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:23 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/forum/user/jonasks" aria-label="Profile: JonasKs">@<bdi>JonasKs</bdi></a><br />
Отличная помощь, спасибо Я пробовал это, но не сработало. Оказалось, что сбой обработки сообщений был вызван неправильным отступом, который прервал цикл моего скрипта по обработке файла csv.</p>
]]></description><link>https://sla247.ru/forum/post/15807</link><guid isPermaLink="true">https://sla247.ru/forum/post/15807</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:22 GMT]]></title><description><![CDATA[<p dir="auto">Я обновил свой код, чтобы отразить предложенные изменения, и теперь могу удалить один объект из файла csv. Это большое улучшение, спасибо. Но удаляется только последний объект в моем файле csv. Кроме того, если есть объект, который уже удален, скрипт завершается и выдает ошибку 404. Мои попытки обновить операцию error msg с 400 на 404 (elif status_code == 404:) для устранения ошибки 404 приводят к ошибке: Ошибка: Код статуса: 404<br />
Сообщение: {"error":{"category":"FRAMEWORK","messages":[{"description":"No resource found"}],"severity":"ERROR"}} Но когда мой скрипт заканчивается из-за того, что объект уже удален, я получаю ошибку 404: Ошибка: Код статуса: 404 Ошибка<br />
соединения -&gt; 404 Ошибка клиента: Не найдено для url:<br />
<a href="https://v-uxfmc01.brunel.ac.uk/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts/005056A6-6972-0ed3-0000-090194314100" rel="nofollow ugc">https://v-uxfmc01.brunel.ac.uk/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/object/hosts/005056A6-6972-0ed3-0000-090194314100</a> При использовании этой операции в моем рабочем объекте POST из скрипта csv скрипт продолжал работу после объекта, который уже существовал. Поэтому я снова прошу о помощи... Во-первых, чтобы понять, почему используется только последний объект в моем csv, и как заставить его удалить все объекты в файле? и Как продолжить работу после объекта, который больше не существует? Большое спасибо всем за помощь, без вас я бы не дошел до этого. Обновленный скрипт f = open("del-hostid.csv")<br />
elementsfile = csv.DictReader(f) for element in elementsfile:<br />
del_data = {<br />
element["objectid"],<br />
} for element in del_data:<br />
del_url = server + api_path + element<br />
try:<br />
r = requests.delete(del_url, headers=headers, verify=False)<br />
status_code = r.status_code<br />
resp = r.text<br />
log = open('delete_objects.log', 'a')<br />
print(" Статус-код: "+str(status_code))<br />
json_resp = json.loads(resp)<br />
log.write('\n=====\n')<br />
log.write(json.dumps(json_resp,sort_keys=True,indent=4, separators=(',', ': ')))<br />
if status_code == 201 or status_code == 202:<br />
print(" SUCCESS ")<br />
elif status_code == 400:<br />
print((" Message: ")+ resp + ('\n'))<br />
else:<br />
r.raise_for_status<br />
print((" Message: ")+ resp + ('\n')) except requests.exceptions.HTTPError as err:<br />
print("Ошибка соединения -&gt; "+str(err))<br />
finally:<br />
if r: r.close print('\nФайл журнала "delete_objects.log" добавлен\n')<br />
input("Нажмите &lt;Enter&gt;, чтобы вернуться к командной строке CMD")</p>
]]></description><link>https://sla247.ru/forum/post/15806</link><guid isPermaLink="true">https://sla247.ru/forum/post/15806</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:21 GMT]]></title><description><![CDATA[<p dir="auto">Я просмотрел дополнительную справку и разобрался с частью, касающейся удаления. Мне просто нужно было отступить: 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("Ошибка соединения -&gt; "+str(err)) finally: if r: r.close</p>
]]></description><link>https://sla247.ru/forum/post/15805</link><guid isPermaLink="true">https://sla247.ru/forum/post/15805</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:21 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/forum/user/jonasks" aria-label="Profile: JonasKs">@<bdi>JonasKs</bdi></a> Спасибо, я написал свой пост с обновлением, не видя этого обновления (на написание поста у меня ушло много времени). Это очень поможет. Я еще раз посмотрю.</p>
]]></description><link>https://sla247.ru/forum/post/15804</link><guid isPermaLink="true">https://sla247.ru/forum/post/15804</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:20 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:19 GMT]]></title><description><![CDATA[<p dir="auto">Хе-хе, я понимаю. Всё сводится к следующим шагам: 1. Распечатайте URL-адрес, на который вы отправляете сообщение. Это позволит понять, что происходит с вашим кодом. Но я попробую написать это для вас: for object in objectsfile: del_data = { object["objectid"] } В этом фрагменте вы создаете<br />
набор<br />
элементов.<br />
del_data<br />
теперь будет выглядеть так: del_data = {'first element', 'second element', 'third element'} Затем вы пробегаете по этому набору: for object in del_data: del_url = server + api_path + object И затем вы<br />
выходите<br />
из цикла. Итак, что происходит: # first loop<br />
del_url = 'first_element'</p>
<h1>second loop</h1>
<p dir="auto">del_url = 'second_element'</p>
<h1>third loop</h1>
<p dir="auto">del_url = 'third_element' Теперь следующее, что вы делаете, — это выполняете свой код: try: r = requests.delete(del_url, headers=headers, verify=False) Но, как вы видите, вы не делаете это<br />
внутри<br />
цикла<br />
for<br />
. Поэтому это происходит только один раз. Если мы посмотрим на этот запрос повнимательнее, то<br />
del_url<br />
— это<br />
third_element,<br />
и я<br />
предполагаю<br />
, что вы действительно хотели, чтобы это происходило для каждого элемента в вашем наборе: 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:<br />
print(del_url)<br />
r = requests.delete(del_url, headers=headers, verify=False) Это гарантирует, что для<br />
каждого<br />
элемента в вашем наборе<br />
del_data<br />
вы будете выполнять эту команду. 2. Не называйте свои переменные<br />
object<br />
, это недопустимое имя для использования в Python, поскольку это встроенный класс.</p>
]]></description><link>https://sla247.ru/forum/post/15803</link><guid isPermaLink="true">https://sla247.ru/forum/post/15803</guid><dc:creator><![CDATA[JonasKs]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:18 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/forum/user/jonasks" aria-label="Profile: JonasKs">@<bdi>JonasKs</bdi></a><br />
Спасибо за помощь. Когда я впервые прочитал эту информацию, мне понадобился смайлик «моя голова просто взорвалась». Я прочитал ее еще несколько раз и, кажется, понял; пойду попробую...</p>
]]></description><link>https://sla247.ru/forum/post/15802</link><guid isPermaLink="true">https://sla247.ru/forum/post/15802</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:18 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:17 GMT]]></title><description><![CDATA[<p dir="auto">В вашем коде вы делаете следующее: for object in del_data: del_url = server + api_path + object try: ... Когда вам нужно отступить ваш <code>try</code>, чтобы каждый раз вызывать <code>del_url</code>: for object in del_data: del_url = server + api_path + object try: ... put code here. Также никогда не используйте <code>object</code> в качестве имени переменной, так как оно затеняет встроенный класс Python <code>object</code>. Назовите его <code>element</code> или чем-то подобным. Что касается вашего вопроса, я бы порекомендовал вывести URL-адрес на печать перед вызовом <code>r.delete(..)</code>, чтобы проверить, правильно ли он отформатирован. Код 404 указывает, что ресурс, к которому вы пытаетесь получить доступ, не существует. Скорее всего, вы уже удалили его в предыдущем запуске, и, поскольку в вашей текущей версии отступы указаны неверно, вы вызвали API только для последнего элемента в вашем CSV-файле.</p>
]]></description><link>https://sla247.ru/forum/post/15801</link><guid isPermaLink="true">https://sla247.ru/forum/post/15801</guid><dc:creator><![CDATA[JonasKs]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:16 GMT]]></title><description><![CDATA[<p dir="auto">Странно, мой ответ, кажется, был удален? Я перепощу его: f = open("del-hostid.csv")<br />
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: print("Connection error -&gt; "+str(err)) У вас был двойной цикл for, который был не нужен. # Old : elif status_code == 400:</p>
<h1>Old : print((" Message: ")+ resp + ('\n'))</h1>
<h1>New : elif status_code == 400 or status_code == 404:</h1>
<h1>New : print(" Message: " + resp + '\n') Я изменил две вещи: # Old : json_resp = json.loads(resp)</h1>
<h1>New : json_resp = r.json</h1>
]]></description><link>https://sla247.ru/forum/post/15800</link><guid isPermaLink="true">https://sla247.ru/forum/post/15800</guid><dc:creator><![CDATA[JonasKs]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:16 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:15 GMT]]></title><description><![CDATA[<p dir="auto">f = open("del-hostid.csv")<br />
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(" 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("Connection error -&gt; "+str(err)) finally: if r: r.close</p>
]]></description><link>https://sla247.ru/forum/post/15799</link><guid isPermaLink="true">https://sla247.ru/forum/post/15799</guid><dc:creator><![CDATA[Maneck_UK]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to ошибка 404 в скрипте Python для удаления объектов из FMC с помощью файла CSV on Mon, 02 Mar 2026 12:02:14 GMT]]></title><description><![CDATA[<p dir="auto">Чтобы не нарушить работу скрипта в случае, если ресурс не найден, можно просто добавить<br />
if status_code == 404<br />
в свою логику, например так: &lt;... your code&gt; elif status_code == 400: print(" Message: " + resp + '\n') elif status_code == 404: print(" Message: " + resp + '\n') else: r.raise_for_status print(" Message: "+ resp + '\n') &lt;...your code&gt; Именно это r.raise_for_status функция, которая фактически вызывает исключение, приводящее к сбою программы. (Если только вы не перехватите это исключение)</p>
]]></description><link>https://sla247.ru/forum/post/15798</link><guid isPermaLink="true">https://sla247.ru/forum/post/15798</guid><dc:creator><![CDATA[JonasKs]]></dc:creator><pubDate>Mon, 02 Mar 2026 12:02:14 GMT</pubDate></item></channel></rss>