Python 3 & Slack Client: ssl.SSLCertVerificationError - PullRequest
3 голосов
/ 19 января 2020

Я пытаюсь получить доступ к Slack в python 3.8, но я не могу пройти первый шаг. Вот мой код:

import slack

slack_token="xoxp-*******-*******-*******-*******"
client = slack.WebClient(slack_token)

client.chat_postMessage(
    channel="XXXXXXXXXX",
    text="Hello from your app! :tada:"
)

print('hello')

и вот ошибка:

Traceback (последний вызов был последним): Файл "/Library/Frameworks/Python.framework/ Версии / 3.8 / lib / python3 .8 / site-packages / aiohttp / connector.py ", строка 936, в _wrap_create_connection return await self._l oop .create_connection (* args, ** kwargs) # тип: игнорировать # noqa Файл "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", строка 1046, в транспорте create_connection, протокол = await self._create_connection_transport (файл) /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py ", строка 1076, в файле _create_connection_transport, ожидают официанта" /Library/Frameworks/Python.framework/ Версии / 3.8 / lib / python3 .8 / asyncio / sslproto.py ", строка 529, в файле data_received ssldata, файл appdata = self._sslpipe.feed_ssldata (data)" /Library/Frameworks/Python.framework/Versions /3.8/lib/python3.8/asyncio/sslproto.py ", строка 189, в файле feed_ssldata self._sslobj.do_handshake () «/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py», строка 944, в do_handshake self._sslobj.do_handshake () ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFFA_ сбой проверки сертификата: невозможно получить сертификат локального эмитента (_ssl. c: 1108)

venv config:

pip3 freeze
aiohttp==3.6.2
async-timeout==3.0.1
attrs==19.3.0
certifi==2019.11.28
chardet==3.0.4
idna==2.8
multidict==4.7.4
pipenv==2018.11.26
slack==0.0.2
slackclient==2.5.0
virtualenv==16.7.9
virtualenv-clone==0.5.3
yarl==1.4.2

Ответы [ 2 ]

1 голос
/ 20 января 2020

Наконец я нашел обходной путь, используя этот код

ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE

sc = slack.WebClient(slack_token,ssl=ssl_context)
0 голосов
/ 20 января 2020

Считаю, что вы используете неверный токен в классе WebClient. Попробуйте использовать токен доступа пользователя бота в WebClient:

slack_token="xoxb-*******-*******-******-******"
client = slack.WebClient(slack_token)

Существует два типа токенов OAuth:

  1. токен доступа OAuth - Запускается с xoxp-
  2. Ток доступа OAuth пользователя бота - начинается с xoxb-

Примечание: вы можете получить доступ токены вашего приложения / бота из url - https://api.slack.com/apps/{yourappid}/oauth?.

Slack OAuth Reference - https://api.slack.com/docs/oauth

...