Telegram webhook cherrypy Connection timed out
Хочу запустить бота Telegram через Webhooks, cherrypy. Все выполняю по инструкции из документации. Но при выборе всех портов кроме 8443, выходит ошибка:
> [20/Nov/2021:11:18:42] ENGINE Listening for SIGTERM.
> [20/Nov/2021:11:18:42] ENGINE Listening for SIGHUP.
> [20/Nov/2021:11:18:42] ENGINE Listening for SIGUSR1.
> [20/Nov/2021:11:18:42] ENGINE Bus STARTING [20/Nov/2021:11:18:42]
> ENGINE Started monitor thread 'Autoreloader'. [20/Nov/2021:11:18:42]
> ENGINE Error in HTTP server: shutting down Traceback (most recent call
> last): File
> "/home/ubuntu/.local/lib/python3.8/site-packages/cherrypy/process/servers.py",
> line 225, in _start_http_thread
> self.httpserver.start() File "/home/ubuntu/.local/lib/python3.8/site-packages/cheroot/server.py",
> line 1836, in start
> self.prepare() File "/home/ubuntu/.local/lib/python3.8/site-packages/cheroot/server.py",
> line 1791, in prepare
> raise socket.error(msg) OSError: No socket could be created -- (('0.0.0.0', 443): [Errno 13] Permission denied)
>
> [20/Nov/2021:11:18:42] ENGINE Bus STOPPING [20/Nov/2021:11:18:42]
> ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('0.0.0.0',
> 443)) already shut down [20/Nov/2021:11:18:42] ENGINE Stopped thread
> 'Autoreloader'. [20/Nov/2021:11:18:42] ENGINE Bus STOPPED
> [20/Nov/2021:11:18:42] ENGINE Bus EXITING [20/Nov/2021:11:18:42]
> ENGINE Bus EXITED
Если же выбрать 8443, вроде все правильно
> [20/Nov/2021:11:20:31] ENGINE Listening for SIGTERM.
> [20/Nov/2021:11:20:31] ENGINE Listening for SIGHUP.
> [20/Nov/2021:11:20:31] ENGINE Listening for SIGUSR1.
> [20/Nov/2021:11:20:31] ENGINE Bus STARTING [20/Nov/2021:11:20:31]
> ENGINE Started monitor thread 'Autoreloader'. [20/Nov/2021:11:20:31]
> ENGINE Serving on https://0.0.0.0:8443 [20/Nov/2021:11:20:31] ENGINE
> Bus STARTED
Но если пишешь боту, то нет ответа не в консоли, не от бота
Перешел по ссылке https://api.telegram.org/bot/getWebhookInfo Получил:
> {"ok":true,"result":{"url":"https://3.128.173.18:8443/token/","has_custom_certificate":true,"pending_update_count":9,"last_error_date":1637407323,"last_error_message":"Connection
> timed out","max_connections":40,"ip_address":"3.128.173.18"}}
что делать?
Вот код:
import telebot
import logging
import cherrypy
token = 'token'
logger = telebot.logger
telebot.logger.setLevel(logging.INFO)
bot = telebot.TeleBot(token)
WEBHOOK_HOST = '3.128.173.18'
WEBHOOK_PORT = 8443
WEBHOOK_LISTEN = '0.0.0.0'
WEBHOOK_SSL_CERT = 'webhook_cert.pem' # Имя сертификата
WEBHOOK_SSL_PRIV = 'webhook_key.pem' # Имя ключа
WEBHOOK_URL_BASE = "https://%s:%s" % (WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/%s/" % (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.message_handler(commands=['start'])
def sta(message):
bot.send_message(message.chat.id, 'Hey')
@bot.message_handler(regexp='buy')
def by(message):
bot.send_message(message.chat.id, 'Whats you want?')
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, {'/': {}})
Ответы (1 шт):
Автор решения: Menso Massanin
→ Ссылка
В операционных системах(mac OS X, bsd etc, linux) порты до 1024(включ.) зарезервированны системой и могут использоваться только суперпользователями, попробуйте запустить код python от имени sudo