Ich schreibe eine Lambda-Funktion mit einer Absicht, die Anfragen verwendet, um Informationen aus einem Wolfram CloudObject zu ziehen. Hier ist der relevante Teil des Codes:Problem mit Anfragen-Modul in Python für AWS Lambda
from __future__ import print_function
import requests
.
.
.
def on_intent(intent_request, session):
print("on_intent requestID=" + intent_request['requestID'] + ", sessionID=" + session['sessionId'])
intent = intent_request['intent']
intent_name = intent_request['intent']['name']
# Dispatch to skill's intent handlers
if intent_name == "GetEvent":
return call_wolfram(intent, session)
elif intent_name == "AMAZON.HelpIntent":
return get_welcome_response()
elif intent_name == "AMAZON.CancelIntent" or intent_name == "AMAZON.StopIntent":
return handle_session_end_request()
else:
raise ValueError("Invalid intent")
.
.
.
# Functions that control skill's behavior
def call_wolfram(intent, session):
url = "https://path-to-cloud-object"
query = {'string1': 'VESSEL', 'string2': 'EVENT', 'RelString': 'TRIGGERED'}
r = requests.get(url, params=query)
session_attributes = {"r_result": r}
speech_output = "Congrats, dummy! It worked"
card_title = "Query"
should_end_session = True
return build_response({}, build_speechlet_response(card_title, speech_output, None, should_end_session)
Der meisten des Restes des Codes folgt die MyColorIs
Beispielvorlage von AWS gegeben mit minimalen Änderungen. Wenn die Lambda-Funktion getestet wird, gibt die Fehlermeldung mir eine JSON-Datei mit StackTrace; Ich habe das Problem auf die Zeilen des Codes r = requests.get()
und session_attributes = {}
eingegrenzt, weil die Ausführung von Lambda, wenn sie auskommentiert, erfolgreich ist. Dies ist mein erstes Projekt mit Python, also bin ich auch neu in der Sprache. Für eine gute Maßnahme, hier ist die Fehlermeldung, die ich nach dem Lambda erhalten ausführt:
http://docs.python-requests.org/en/master/user/advanced/
Es gibt zwei Möglichkeiten:
{
"stackTrace": [
[
"/var/task/query_lambda.py",
27,
"lambda_handler",
"return on_intent(event['request'], event['session'])"
],
[
"/var/task/query_lambda.py",
65,
"on_intent",
"return call_wolfram(intent, session)"
],
[
"/var/task/query_lambda.py",
113,
"call_wolfram",
"r = requests.get(url, params=query)"
],
[
"/var/task/requests/api.py",
71,
"get",
"return request('get', url, params=params, **kwargs)"
],
[
"/var/task/requests/api.py",
57,
"request",
"return session.request(method=method, url=url, **kwargs)"
],
[
"/var/task/requests/sessions.py",
475,
"request",
"resp = self.send(prep, **send_kwargs)"
],
[
"/var/task/requests/sessions.py",
585,
"send",
"r = adapter.send(request, **kwargs)"
],
[
"/var/task/requests/adapters.py",
477,
"send",
"raise SSLError(e, request=request)"
]
],
"errorType": "SSLError",
"errorMessage": "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)"
}
Dies ist ein SSL-Zertifikatfehler. versuche, 'certifi' mit pip zu aktualisieren, um sicherzustellen, dass die Zertifikate aktuell sind (in einer Konsole, 'pip install certifi --upgrade') –
@CorleyBrigman Ich habe 'sudo -H pip install certifi --upgrade' und wurde der Anforderung war bereits auf dem neuesten Stand. –
muss die URL 'https' sein? Wenn dies der Fall ist, können Sie in derselben Umgebung, in der Sie die Anfrage stellen, von einem Webbrowser aus darauf zugreifen? Sie müssen möglicherweise ein benutzerdefiniertes Zertifikat oder etwas installieren ... –