Ich versuche zu sehen, wie auf die Anfrage Header-und Körper Werte von mit im Lambda-Code zugreifen. Wenn der Anfragetext im JSON-Format vorliegt, wird er automatisch analysiert und im Ereignisobjekt verfügbar gemacht.Zugriff HTTP-Anfrage (Header, Query String, Cookies, Körper) Objekt in Lambda mit HTTP-Endpunkt
Wie kann ich auf die gesamte Abfragezeichenfolge, den Anfragetext, die Anforderungsheader (Cookies) für jede Art von eingehender "Content-Type" -Anfrage in Lambda zugreifen?
Die folgenden Änderungen sind Informationen, die ich gesammelt haben, um die Frage zu lösen, die nicht relevant sind oder nicht. Bitte ignorieren Sie sie, wenn Sie möchten.
EDIT:
Ich ging durch die bestehenden Fragen auf SE here und here. Nach diesem thread, sollte $input.json('$')
den Trick tun. Ich nehme an, dass die Antworten aus diesen Links bereits veraltet sind, da das API-Gateway JSON in der Anfrage standardmäßig zu erkennen scheint und es dann im Objekt event
verfügbar macht, ohne dass Mapping-Vorlagen konfiguriert sind.
Die Zuordnung wie vorgeschlagen einstellen, funktioniert nicht für mich. Es enthält nicht die Anforderungsheaderinformationen.
Hier sind Screenshots, wie es konfiguriert ist.
Die "Header" -Taste wird ein leeres. Mit $input.params('$')
oder "$input.params('$')"
Fehler aus.
EDIT 2
die Header in Verfahrensanforderungs Versuchte definieren. Immer noch nicht der User-Agent-Wert in Lambda.
EDIT 3
verwendete ich die folgende Vorlage Mapping an der API-Gateway
{
"request": $input.json('$'),
"headers": "$input.params()"
}
und den Code unten in Lambda
context.succeed("event.key32:"+JSON.stringify(event, null, 2));
Und die Antwort durch die API-Gateway erzeugt zeigt diesen
in der Antwort auf dem „Header“ Wert Blick sieht es aus wie die AWS-SDK/API-Gateway/Cloudfront streift alle Header aus dem HTTP-Client empfangen? Hier ist der vollständige Text aus dem JSON, der von $ input.params() zurückgegeben wurde.header
header={CloudFront-Forwarded-Proto=https, CloudFront-Is-Desktop-Viewer=true, CloudFront-Is-Mobile-Viewer=false, CloudFront-Is-SmartTV-Viewer=false, CloudFront-Is-Tablet-Viewer=false, Content-Type=application/json, Via=1.1 5d53b9570d94ce920abbd471.cloudfront.net (CloudFront), 1.1 95eea7baa7ec95c9a41eca9e3ab7.cloudfront.net (CloudFront), X-Amz-Cf-Id=GBqmObLRy6Iem9bJbVPrrW1K3YoWRDyAaMpv-UkshfCsHAA==, X-Forwarded-For=172.35.96.199, 51.139.183.101, X-Forwarded-Port=443, X-Forwarded-Proto=https}}
Es ist nicht die User-Agent-String hat im Header, obwohl, wie der Screenshot oben zeigt, ist es durch die REST-Client gesendet wurde. Interessanterweise wird die gesamte Abfragezeichenfolge zur Verfügung gestellt. Nicht sicher, ob dies ein beabsichtigter Weg ist, um darauf zuzugreifen.
Können Sie die Frage vereinfachen? Es ist jetzt wirklich aufgebläht. – kixorz
@napalm, ich habe den Frageteil hervorgehoben. Bitte ignoriere die Änderungen. Um die Frage zusammenzufassen: Wie kann ich auf die gesamte Abfragezeichenfolge, den Anfragetext, die Anforderungsheader (Cookies) für jede Art von eingehenden "Content-Type" -Anfragen innerhalb von Lambda zugreifen? – user3526