Python 3 urllib Discord 与 Slack Bot
Posted
技术标签:
【中文标题】Python 3 urllib Discord 与 Slack Bot【英文标题】:Python 3 urllib Discord vs Slack Bot 【发布时间】:2019-07-21 08:14:00 【问题描述】:我有一个简单的 python 脚本,它应该可以在 Slack 上向我发送一条消息,它运行良好。
#!/usr/bin/python
from urllib.request import Request, urlopen
import json
# Provide the webhook URL that slack generated
slack_webhook_url = 'https://hooks.slack.com/services/josadfs/nfonwnfoawf/abcdsads'
# Post the message to the slack webhook
message =
"text": "Hello world"
req = Request(slack_webhook_url, json.dumps(message).encode('utf-8'))
response = urlopen(req)
response.read()
我有另一个脚本做同样的事情,但不和谐。
#!/usr/bin/python
from urllib.request import Request, urlopen
import json
# Provide the webhook URL that slack generated
slack_webhook_url = 'https://discordapp.com/api/webhooks/252534154132/knskdnvoangoe0940507230'
# Post the message to the slack webhook
message =
"content": "Hello world"
req = Request(slack_webhook_url, json.dumps(message).encode('utf-8'))
response = urlopen(req)
response.read()
由于某种原因,这给了我一个HTTP Error 403: Forbidden
错误。
curl
命令都有效,因此这不是 API 密钥问题。但是,当使用 requests 模块时,discord 脚本可以工作。
#!/usr/bin/python
import json
import requests
# Provide the webhook URL that Discord generated
discord_webhook_url = 'https://discordapp.com/api/webhooks/252534154132/knskdnvoangoe0940507230'
# Post the message to the Discord webhook
data =
"content": "Hello world"
requests.post(discord_webhook_url, data=data)
我的 urllib 实现有问题吗?可以使用urllib发送discord请求吗?
【问题讨论】:
为什么你的标题中没有提到Telegram
?
对不起!那是一个错字。不过,我也用电报尝试过,但它也有类似的不和谐问题。
【参考方案1】:
Discord 似乎阻止了来自 Python urllib 的默认用户代理的请求。通过使用 Request.add_header() 指定 User-Agent 和 Content-Type,我能够成功执行代码。我测试了下面的代码,它对我有用。
#!/usr/bin/python
from urllib.request import Request, urlopen
import json
# Provide the webhook URL that slack generated
slack_webhook_url = '<redacted>'
# Post the message to the slack webhook
message =
"content": "Hello world"
req = Request(slack_webhook_url, json.dumps(message).encode('utf-8'))
#specifying headers for the request, discord appears to block the default urllib user-agent
req.add_header('Content-Type', 'application/json')
req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11')
response = urlopen(req)
response.read()
【讨论】:
永远的答案!谢谢!以上是关于Python 3 urllib Discord 与 Slack Bot的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中获取随机 youtube 视频,不和谐