[英]Extracting Parameters from POST Request in Python Lambda
上下文:我正在嘗試向 AWS lambda function 發出一個 POST 請求,該請求用 python 從 Z68636995AF75A60EDA0EF75A60EDA0 然后,我會將 POST 請求中的信息輸入到數據庫中。
問題:我似乎無法弄清楚如何從 POST 請求中獲取信息。 並將其存儲到變量中。
我嘗試使用在 AWS 提供的測試模擬中有效的 event['Username'],盡管實際上並沒有。
<form method="POST" action="https://fake.execute-api.us-east-1.amazonaws.com/Prod/RegisterUser">
<label for="Username">Username:</label><br>
<input type="text" id="Username" name="Username" value=""><br>
<label for="password">Password:</label><br>
<input type="text" id="Password" name="Password" value=""><br><br>
<input type="submit" id="submit" value="Submit" >
</form>
POST /Prod/RegisterUser HTTP/1.1
Host: fake.execute-api.us-east-1.amazonaws.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
Connection: close
Upgrade-Insecure-Requests: 1
Username=jat&Password=sa
import pymysql
import json
#endpoint = 'fake.us-east-1.rds.amazonaws.com'
#username = 'admin'
#password = 'admin'
#database_name = 'fake'
#connection
#connection = pymysql.connect(endpoint, user=username, passwd=password, db=database_name)
def lambda_handler(event, context):
user = event['Username']
password = event['Password']
return {
"Username": user,
"Password":password
}
您的 HTTP 主體將通過 lambda 作為event['body']
。
另外,我認為您需要使用json.loads
解析正文的 JSON 字符串。
最后,我看到您的 HTML 正在執行GET
方法,您可能需要解決該問題:
<form method="POST" action="https://fake.execute-api.us-east-1.amazonaws.com/Prod/RegisterUser">
無服務器是 lambda 功能的絕佳資源。 以下是他們可能適用於您的案例的示例:
https://github.com/serverless/examples/blob/master/aws-python-rest-api-with-dynamodb/todos/create.py
解決了:
我發現由於字符串格式,直接發布到 AWS Lambda 不起作用。 AWS Lambda 需要使用 JSON.stringify() 的 JSON 格式。
<form onsubmit="submitData();return false;">
<label for="Username">Username:</label><br>
<input type="text" id="Username" name="Username" value=""><br>
<label for="password">Password:</label><br>
<input type="text" id="Password" name="Password" value=""><br><br>
<input type="submit" id="submit" value="Submit" >
</form>
function submitData() {
var user = document.getElementById("Username").value
var pass = document.getElementById("Password").value
var json = { Username: user, Password: pass };
$.ajax({
type: "POST",
url: "https://fake.execute-api.us-east-1.amazonaws.com/Prod/RegisterUser",
data: JSON.stringify(json),
beforeSend: function() {
console.log("Before");
$("#submit").attr('disabled', true);
},
success: function(response){
console.log(response);
$("#submit").attr('disabled', false);
}
});
}
import pymysql
import json
def lambda_handler(event, context):
resp = event
return {
"Username:": resp["Username"],
"Password": resp["Password"]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.