잡동사니

반응형

질문

문맥:JavaScript에서 Python으로 작성된 AWS Lambda 함수에 POST 요청을하려고합니다. 그런 다음 POST 요청의 정보를 데이터베이스에 입력합니다.

문제:POST 요청에서 정보를 얻는 방법을 알아낼 수없는 것 같습니다. 변수에 저장합니다.

실제로는 그렇지 않지만 AWS에서 제공하는 테스트 시뮬레이션에서 작동하는 이벤트 [ '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
   }

답변1

HTTP 본문은 람다를 통해 event [ 'body'] 로 전달됩니다.

또한 json.loads 를 사용하여 본문의 JSON 문자열을 파싱해야한다고 생각합니다.

마지막으로 HTML이 GET메서드를 수행하는 것을 보았습니다.

<form method="POST" action="https://fake.execute-api.us-east-1.amazonaws.com/Prod/RegisterUser">

서버리스는 람다 함수를위한 훌륭한 리소스입니다. 다음은 귀하의 사례에 적용될 수있는 그들의 예입니다.

https://github.com/serverless/examples/blob/master/aws-python-rest-api-with-dynamodb/todos/create.py



답변2

해결 :

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"]
   }


 

 

 

 

출처 : https://stackoverflow.com/questions/62939598/extracting-parameters-from-post-request-in-python-lambda

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band