Access-HTTP-Anforderungsobjekt (Header, Abfragezeichenfolge, Cookies, Textkörper) in Lambda mit http-Endpunkt

Ich versuche herauszufinden, wie ich mit im Lambda-Code auf den Anforderungsheader und die Body-Werte zugreifen kann. Wenn der Anforderungshauptteil im JSON-Format vorliegt, wird er anscheinend automatisch analysiert und im Ereignisobjekt verfügbar gemacht.

Wie kann ich auf die vollständige Abfragezeichenfolge, den Anfragetext und die Anfragetitel (Cookies) für jede Art von eingehender "Content-Type" -Anfrage in Lambda zugreifen?

Die folgenden Änderungen sind Informationen, die ich gesammelt habe, um bei der Lösung der Frage zu helfen, die möglicherweise relevant ist oder nicht. Bitte ignorieren Sie sie, wenn Sie möchten.

BEARBEITEN

Ich habe die bestehenden Fragen zu SE @ durchgesehHie undHie. Nach diesemFade mit$input.json('$') sollte den Trick machen. Ich denke, die Antworten von diesen Links oben sind bereits veraltet, da API-Gateway JSON in der Anfrage standardmäßig zu erkennen scheint und, falls ja, im @ verfügbar machevent Objekt ohne konfigurierte Zuordnungsvorlagen.

Das Festlegen der vorgeschlagenen Zuordnung funktioniert bei mir nicht. Es enthält keine Informationen zum Anforderungsheader.

Hier finden Sie Screenshots zur Konfiguration.

Die Taste "Header" gibt einen leeren Wert zurück. @ Verwend$input.params('$') oder"$input.params('$')" fehler raus.

EDIT 2

Versucht, die Header in der Methodenanforderung zu definieren. Immer noch nicht den User-Agent-Wert in Lambda erhalten.

EDIT 3

Ich habe das folgende Template-Mapping am API-Gateway verwendet

{
    "request": $input.json('

und der folgende Code in Lambda

context.succeed("event.key32:"+JSON.stringify(event, null, 2) );

Und die vom API-Gateway generierte Antwort zeigt dieses

Betrachtet man den "Header" -Wert in der Antwort, so sieht es so aus, als ob das AWS-SDK / API-Gateway / Cloudfront alle vom HTTP-Client empfangenen Header entfernt. Hier ist der vollständige Text aus dem JSON, der von $ input.params () zurückgegeben wird. 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}}

Der User-Agent-String befindet sich nicht im Header, obwohl er, wie im obigen Screenshot gezeigt, vom REST-Client gesendet wurde. Interessanterweise wird die gesamte Abfragezeichenfolge zur Verfügung gestellt. Ich bin mir nicht sicher, ob dies eine beabsichtigte Möglichkeit ist, darauf zuzugreifen.

), "headers": "$input.params()" }

und der folgende Code in Lambda

context.succeed("event.key32:"+JSON.stringify(event, null, 2) );

Und die vom API-Gateway generierte Antwort zeigt dieses

Betrachtet man den "Header" -Wert in der Antwort, so sieht es so aus, als ob das AWS-SDK / API-Gateway / Cloudfront alle vom HTTP-Client empfangenen Header entfernt. Hier ist der vollständige Text aus dem JSON, der von $ input.params () zurückgegeben wird. 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}}

Der User-Agent-String befindet sich nicht im Header, obwohl er, wie im obigen Screenshot gezeigt, vom REST-Client gesendet wurde. Interessanterweise wird die gesamte Abfragezeichenfolge zur Verfügung gestellt. Ich bin mir nicht sicher, ob dies eine beabsichtigte Möglichkeit ist, darauf zuzugreifen.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage