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的主要内容,如果未能解决你的问题,请参考以下文章

python3.X版本与2.X版本里urllib库的不同

Python2/3中的urllib库

如何在 python 中获取随机 youtube 视频,不和谐

python2 与 python3 urllib的互相对应关系

Python3.X与urllib

Python爬虫3-----Urllib库的基本使用1