python - 使 Python 3.x Slack (slackclient) 使用企业代理

标签 python python-3.x proxy slack slack-api

我有一些 Python 3 代码,可以让它使用模块 slackclient 发布到 channel ,没问题。但是,如果我从所有流量都需要通过代理的公司服务器运行此代码,它就会失败。我知道代理服务器和端口,必须使用它们从我们的服务器运行 pip,如下所示:

pip install --proxy proxy.evilcorp.com:8080 slackclient

效果很好。如果我不代理 pip,它将无法按预期连接。所以这告诉我我只需要弄清楚如何让我的 slackclient 代码使用代理,但是如何呢?这是我的代码:

from slackclient import SlackClient

def get_slackclient():
    token = "blah-blah-token"
    sc = SlackClient(token)
    return sc

def post_slackmessage(username,channel,text):
    sc = get_slackclient()
    try:
        sc.api_call("chat.postMessage",channel=channel,text=text,username=username,unfurl_links="true")
    except:
        print ("failed to post messaage to slack")

post_slackmessage("test_slack", "test", "hurrah it posted")

我似乎无法弄清楚将代理设置放在哪里,我一定是遗漏了一些简单的东西。我对其他开箱即用的想法持开放态度,以使这一切正常,但我无法真正在服务器上安装任何东西来使所有流量都通过代理或更改代理设置。

最佳答案

想通了。我会把它留在这里,以防其他人遇到同样的问题。看起来它是内置的,只需传入一个代理命令即可。

def get_slackclient():
    #https://api.slack.com/custom-integrations/legacy-tokens
    token = "blah-blah-blah"
    proxies = dict(https="proxy.evilcorp.com:8080", http="proxy.evilcorp.com:8080")
    sc = SlackClient(token, proxies=proxies)
    return sc

好吧,这很简单 :)

更新

如果你碰巧升级到最新的 slack 模块,它会有点不同,并且只支持 http://代理(对你来说不安全!)。你传入一个 str 而不是 dict 所以只有一个代理。

只需更改为:

proxy = "proxy.evilcorp.com:8080"
sc = slack.WebClient(token, timeout=60, proxy=proxy)

您会注意到实际上对 api 的调用也发生了变化,如下所示:

sc.chat_postMessage(channel=thechannel, text=thetext, username=theusername, unfurl_links="true")

关于python - 使 Python 3.x Slack (slackclient) 使用企业代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46365527/

相关文章:

java - 如何在POM.xml文件中指定代理,找不到settings.xml文件

python - 如何检查 SOCKS 服务器是否正常工作?

nginx - 什么是kube-nginx,它与kube-proxy有何区别?

python - 索引错误 : list index out of range python 2. 7

python - 如何防止按键在 QPlainTextEdit 中起作用

python - 如何从 QWebEngineView 禁用 contextMenu?

python - 创建新文件的函数

html - 通过代理路由网站

Python Falcon CORS 与 AJAX 错误

python - 在 Django 中设置拆卸登录注销的正确方法