Я не могу опубликовать свой JSON в своей функции API лямбда. Я получаю {"message": "Missing Authentication Token"} - PullRequest
1 голос
/ 23 апреля 2019

enter image description hereenter image description here На самом деле все работает нормально, когда я импортирую json в приложение POSTMAN и отправляю запрос. Но проблема возникает, когда я пытаюсь POST с помощью ajax позвоните или прямо нажмите на API

Я пытался удалить ключ API и сделал каждую авторизацию none

Это мой API - https://ym4j4pt5mf.execute -api.us-east-1.amazonaws.com / Beta И я пытаюсь опубликовать это как необработанное тело: -

{
  "DestinationBot": "iSearchBot",
  "SenderID": "12345",
  "botAlias": "iSearchBotBeta",
  "message": {
    "text": "hi"
  }
}

Это ответ, который я получаю, когда нажимаю на API, импортируя его из шлюза API через POSTMAN

{
    "ResponseMetadata": {
        "RequestId": "65e1b452-65e4-11e9-ab8a-d328589017aa",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "content-type": "application/json",
            "date": "Tue, 23 Apr 2019 16:25:25 GMT",
            "x-amzn-requestid": "65e1b452-65e4-11e9-ab8a-d328589017aa",
            "content-length": "709",
            "connection": "keep-alive"
        },
        "RetryAttempts": 0
    },
    "intentName": "HotelReservation",
    "slots": {
        "FromDate": null,
        "Location": null,
        "adultCount": null,
        "checkOutDate": null,
        "childCount": null,
        "childExists": null,
        "noOfRooms": null,
        "searchHotel": null,
        "welcome": null
    },
    "sessionAttributes": {},
    "message": "I am iSearchBot,I can help you book a hotel",
    "messageFormat": "PlainText",
    "dialogState": "ElicitSlot",
    "slotToElicit": "welcome",
    "responseCard": {
        "version": "1",
        "contentType": "application/vnd.amazonaws.card.generic",
        "genericAttachments": [
            {
                "title": "Do you want to book a Hotel",
                "imageUrl": "https://pbs.twimg.com/profile_images/1034820690463997957/TZEsJwEa_400x400.jpg",
                "buttons": [
                    {
                        "text": "Yes",
                        "value": "Yes"
                    },
                    {
                        "text": "No",
                        "value": "No"
                    }
                ]
            }
        ]
    }
}

Заранее спасибо, любая помощь будет отличной

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Ну, это решит вашу проблему, я думаю, проблема была в том, что json stringify работает легко

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){

var value={ 
  'DestinationBot': "iSearchBot",
  'SenderID': "12345",
  'botAlias': "iSearchBotBeta",
  'message': {
    'text': "hi"
  }
};
value = JSON.stringify(value);
$.ajax({
  url:'https://ym4j4pt5mf.execute-api.us-east-1.amazonaws.com/Beta/',
  headers:{  
    'Content-Type': "application/json",   
  },
  crossDomain: true,
  method:'POST',
  dataType:'json',
  data:value,
  success:function(msg){
    console.log(msg)
  }
});
});

</script>
</head>
<body>

<input type="text"></input>

</body>
</html>
1 голос
/ 23 апреля 2019

Хорошо, я не знаю точно, какие у вас настройки, но я укажу вам направление. Проблема в том, что запрос должен быть выполнен с его необработанным телом и типом application / json. Ключевым моментом здесь является «Content-Type» и полезная нагрузка JSON. Если вы не используете именно эту библиотеку, я уверен, что другой будет иметь аналогичные параметры.

import http.client

conn = http.client.HTTPConnection("ym4j4pt5mf,execute-api,us-east-1,amazonaws,com")

payload = "{\n  \"DestinationBot\": \"iSearchBot\",\n  \"SenderID\": \"12345\",\n  \"botAlias\": \"iSearchBotBeta\",\n  \"message\": {\n    \"text\": \"hi\"\n  }\n}"

headers = {
  'Content-Type': "application/json",
  'cache-control': "no-cache",
  'Postman-Token': "0de52364-daf7-4977-8b82-55d5258a4046"
  }

conn.request("POST", "Beta", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

Или, если вы используете запросы:

import requests

url = "https://ym4j4pt5mf.execute-api.us-east-1.amazonaws.com/Beta"

payload = "{\n  \"DestinationBot\": \"iSearchBot\",\n  \"SenderID\": \"12345\",\n  \"botAlias\": \"iSearchBotBeta\",\n  \"message\": {\n    \"text\": \"hi\"\n  }\n}"
headers = {
    'Content-Type': "application/json",
    'cache-control': "no-cache",
    'Postman-Token': "245fea6e-5604-47dd-96ec-745ae2b6cde0"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)
...