【问题标题】:Is there a way to send a POST request to slack without using Webhook?有没有办法在不使用 Webhook 的情况下向 slack 发送 POST 请求?
【发布时间】:2023-03-19 16:26:02
【问题描述】:

我尝试使用 webhook 向我的 slack 频道发送 POST 请求,但无济于事。
无论我做什么,它总是返回一个错误的请求。
有没有办法在不使用 webhook 的情况下向 slack 发送 POST 请求?

编辑:我正在使用的代码

import json
import urllib.request
#import botocore.requests as requests

def lambda_handler(event, context):
  webhook=event['webhook']
  #response = urllib.request.urlopen(message) 
  #print(response) 

  slack_URL = 'https://hooks.slack.com/services/mywebhookurl'

#  req = urllib.request.Request(SLACK_URL, json.dumps(webhook).encode('utf-8'))
  json=webhook
  json=json.encode('utf-8')
  headers={'Content-Type': 'application/json'}
  #urllib.request.add_data(data)
  req = urllib.request.Request(slack_URL, json, headers)
  response = urllib.request.urlopen(req)

【问题讨论】:

  • 如何使用 webhook?你能显示你的代码吗?
  • 我添加了我的代码,但问题是我总是收到 HTTP 400 Error Bad Request。我已经调试了好几天,但没有任何效果,所以我想看看是否有其他方法可以做到这一点。

标签: python aws-lambda bots slack


【解决方案1】:

我认为当您在 utf-8 中编码 JSON 时会出现问题。试试下面的脚本。

import json
import requests

# Generate your webhook url at  https://my.slack.com/services/new/incoming-webhook/
webhook_url = "https://hooks.slack.com/services/YYYYYYYYY/XXXXXXXXXXX"
slack_data = {'text': "Hi Sarath Kaul"}

response = requests.post(webhook_url, data=json.dumps(slack_data),headers={'Content-Type': 'application/json'})
print response.status_code

如果你想使用urllib

import json
import urllib.request

import urllib.parse


url = 'https://hooks.slack.com/services/YYYYYYYYY/XXXXXXXXXXX'
data = json.dumps({'text': "Sarath Kaul"}).encode('utf-8') #data should be in bytes
headers = {'Content-Type': 'application/json'}
req = urllib.request.Request(url, data, headers)
resp = urllib.request.urlopen(req)
response = resp.read()

print(response)

【讨论】:

  • 我正在使用 AWS Lambda,它无法使用请求库。这就是我使用 urllib 的原因。
  • 很确定这不正确。查看有关如何将请求库与 AWS Lambda 一起使用的答案:stackoverflow.com/questions/47077829/…
  • 一位 AWS 代表告诉我,由于未安装,请求将不起作用。我已经尝试使用这些确切的说明安装库,但它仍然无法识别请求库。
  • 哇,我在几次调试前几乎逐字逐句地进行了调试,并且没有 urllib.parse 部分......这真是太疯狂了
  • 我必须说,如果 AWS Lambda 不能使用最流行的库来处理 HTTP 请求,我会感到很惊讶。我知道它可以与 Heroku 一起使用,但我自己还没有在 AWS 上尝试过。但感谢您提供的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
相关资源
最近更新 更多