Python 是否可以仅使用本机库向AWS Lambda发出延迟POST请求?

Python 是否可以仅使用本机库向AWS Lambda发出延迟POST请求?,python,amazon-web-services,aws-lambda,http-post,webhooks,Python,Amazon Web Services,Aws Lambda,Http Post,Webhooks,我正在尝试使用Webhook发出一个POST请求来松弛。我可以在本地向Slack实例发送curl,但在lambda中尝试这样做时,我在尝试发送有效负载时遇到了麻烦 我所看到的一切都表明我必须使用和压缩自定义库,但出于我所做的目的,我需要使用本机python代码。有没有办法发送此POST请求 import json import urllib.request #import botocore.requests as requests def lambda_handler(event, conte

我正在尝试使用Webhook发出一个POST请求来松弛。我可以在本地向Slack实例发送curl,但在lambda中尝试这样做时,我在尝试发送有效负载时遇到了麻烦

我所看到的一切都表明我必须使用和压缩自定义库,但出于我所做的目的,我需要使用本机python代码。有没有办法发送此POST请求

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

def lambda_handler(event, context):
  message=event['message']
  response = urllib.request.urlopen(message) 
  print(response) 
这段代码给了我一个400错误,这就是我如何知道我正在点击我想要的URL(URL在message变量中),但通过添加标题和文本正文发送有效负载的每次尝试似乎都失败了。

您可以尝试以下操作:

SLACK_URL = 'https://hooks.slack.com/services/....'

req = urllib.request.Request(SLACK_URL, json.dumps(message).encode('utf-8'))
response = urllib.request.urlopen(req)
  • 请查找附加的lambda_处理程序代码,希望这对您有所帮助
  • 所有要在slack上发布的消息都放在SNS主题上,然后由lambda读取,并使用slack webhook url发布到slack频道

我仍然收到相同的错误请求400错误,这意味着有效负载未正确发送。编码应为ascii类型
json.dumps(message).encode('ascii')
如果没有“data”参数,请求方法将被视为GET,而不是POST。检查。将参数更改为数据,仍然存在400错误。1)添加数据(dict)以发出post请求。2) 将数据序列化obj转换为JSON格式的str,然后使用ascii格式的
data=JSON.dumps(data.encode('ascii')
import os
import json
from urllib2 import Request, urlopen, URLError, HTTPError

# Get the environment variables
SLACK_WEBHOOK_URL = os.environ['SLACK_WEBHOOK_URL']
SLACK_CHANNEL = os.environ['SLACK_CHANNEL']
SLACK_USER = os.environ['SLACK_USER']

def lambda_handler(event, context):
    # Read message posted on SNS Topic
    message = json.loads(event['Records'][0]['Sns']['Message'])

# New slack message is created
    slack_message = {
        'channel': SLACK_CHANNEL,
        'username': SLACK_USER,
        'text': "%s" % (message)
    }
# Post message on SLACK_WEBHOOK_URL
    req = Request(SLACK_WEBHOOK_URL, json.dumps(slack_message))
    try:
        response = urlopen(req)
        response.read()
        print(slack_message['channel'])
    except HTTPError as e:
        print(e)
    except URLError as e:
        print(e)