Природа происхождения ошибки 409 кроется в конфликте запросов. Не всегда эти запросы относятся к пользовательским. Например, такая ошибка может возникнуть при конфликте файлов сайта, если они обращаются к разным данным в одном файле. В результате этого, сервер возвращает ошибку, которая на самом деле не имеет отношения к запросам пользователей.
Основные причины возникновения ошибки 409:
- Пользователь обращается к данным, имеющим отличное значение или более новую версию. В итоге, сервер выдает ошибку 409, т.к. существует обновленная версия файла, страницы или скрипта.
- Ошибка 409 появилась в результате конфликтующих запросов внутри файлов на сервере. Решить проблему может программист.
- Использование прокси, которое конфликтует с определенными адресами или форматами запрашиваемых данных. Не путайте эту ошибку с ошибкой 407.
- Более распространенная причина – троян или вирус, который блокирует запросы к определенным сайтам или подгружает файл, который имеет конфликт с конфигурацией браузера.
- Ошибка 409 Conflicting Request в большинстве случае решается системным администратором или программистом, если это не касается заражения компьютера вирусом или трояном. Как проверить и какой программой расскажем ниже.
Чистим от вируса или трояна, чтобы убрать ошибку 409
Определить вирус/троян у вас или нет просто – установите программу Cureit от Dr.Web и просканируйте систему этой программой. Она бесплатная и не требует установки. Скачиваем только с официального сайта. В программе отмечаем все пункты для проверки и шагаем спать/на работу, т.к. сама проверка займет длительное время. На скриншоте ниже вы можете рассмотреть, как и что отмечать в программе. Свой антивирус лучше отключить перед проверкой.
В случае, если ошибка 409 Conflicting Request появляется буквально на каждом сайте, чтобы вы ни нажимали – это точно троян или вирус. Причем это должно происходить в любом браузере. Если нет – можете сразу удалить и заново установить браузер. Возможно произошел сбой конфигурации браузера. Заранее нужно сохранить закладки, т.к. можно потерять все нажитое непосильным трудом. Делается это просто. На скриншоте выше вы видите пример сохранения настроек в браузере Mozilla. Аналогично делается и в остальных браузерах.
Последнее слово про ошибку
Если уж сильно хочется – установите программу CCleaner и пройдитесь по реестру с помощью этой программы. Во всяком случае это безопаснее, чем делать что-то лично ручками. Манипуляции с компьютером в случае с ошибкой 409 делать не стоит.
Как решить 409 в Telegram Bot при использование webHook?
Машина на Windows где крутится бот , в будущем это будет vps от того же Amazon
и данный код:
# -*- coding: utf-8 -*-
import constant
import telebot
bot = telebot.TeleBot(constant.token)
WEBHOOK_URL_BASE = "ссылка Amazon"
WEBHOOK_URL_PATH = "https://api.telegram.org/bot{token}/{method}".format(
token = "токен",
method ="setWebhook"
)
bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH)
@bot.message_handler(func=lambda message: True, content_types=['text'])
def echo_msg(message):
bot.send_message(message.chat.id, message.text)
if __name__ == '__main__':
bot.polling(none_stop=True)
При запуске получаем следующую ошибку:
2017-12-05 10:58:23,116 (__init__.py:292 MainThread) ERROR — TeleBot: «A request to the Telegram API was unsuccessful. The server returned HTTP 409 Conflict. Response body:
[b'{«ok»:false,»error_code»:409,»description»:»Conflict: can’t use getUpdates method while webhook is active»}’]»
для начала удалите
if __name__ == '__main__': bot.polling(none_stop=True)
а webhook, у меня работает так:
WEBHOOK_HOST = 'URL' #без http:// и https:// WEBHOOK_PORT = 88 # 443, 80, 88 or 8443 (port need to be 'open') WEBHOOK_LISTEN = '0.0.0.0' # In some VPS you may need to put here the IP addr WEBHOOK_SSL_CERT = '/etc/nginx/ssl/FILE.cer' # Path to the ssl certificate WEBHOOK_SSL_PRIV = '/etc/nginx/ssl/FILE.key' # Path to the ssl private key WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT) WEBHOOK_URL_PATH = "/%s/" % (constant.token) bot = telebot.TeleBot(constant.token) class WebhookServer(object): @cherrypy.expose def index(self): if 'content-length' in cherrypy.request.headers and 'content-type' in cherrypy.request.headers and cherrypy.request.headers['content-type'] == 'application/json': length = int(cherrypy.request.headers['content-length']) json_string = cherrypy.request.body.read(length).decode("utf-8") update = telebot.types.Update.de_json(json_string) # Эта функция обеспечивает проверку входящего сообщения bot.process_new_updates([update]) return '' else: raise cherrypy.HTTPError(403)
bot.remove_webhook() bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH, certificate=open(WEBHOOK_SSL_CERT, 'r')) cherrypy.config.update({ 'server.socket_host': WEBHOOK_LISTEN, 'server.socket_port': WEBHOOK_PORT, 'server.ssl_module': 'builtin', 'server.ssl_certificate': WEBHOOK_SSL_CERT, 'server.ssl_private_key': WEBHOOK_SSL_PRIV }) cherrypy.quickstart(WebhookServer(), WEBHOOK_URL_PATH, {'/': {}})