I create a webhook to receive notifications from a third-party service, they sent data to the POST body with the content type application/x-www-form-urlencoded .
But it generates the same error:
{"message": "Could not parse request body into json: Unrecognized token \'name\': was expecting \'null\', \'true\', \'false\' or NaN\n at [Source: [ B@456fe137 ; line: 1, column: 6]"}
I could reproduce the error with the following curl call:
% curl -v -X POST -d 'name=Ignacio&city=Tehuixtla' https://rl9b6lh8gk.execute-api.us-east-1.amazonaws.com/prod/mandrillListener * Trying 54.230.227.63... * Connected to rl9b6lh8gk.execute-api.us-east-1.amazonaws.com (54.230.227.63) port 443 (#0) * TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * Server certificate: *.execute-api.us-east-1.amazonaws.com * Server certificate: Symantec Class 3 Secure Server CA - G4 * Server certificate: VeriSign Class 3 Public Primary Certification Authority - G5 > POST /prod/mandrillListener HTTP/1.1 > Host: rl9b6lh8gk.execute-api.us-east-1.amazonaws.com > User-Agent: curl/7.43.0 > Accept: */* > Content-Length: 27 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 27 out of 27 bytes < HTTP/1.1 400 Bad Request < Content-Type: application/json < Content-Length: 180 < Connection: keep-alive < Date: Thu, 28 Jan 2016 12:29:40 GMT < x-amzn-RequestId: cd4d9232-c5ba-11e5-a158-b9b39f0b0599 < X-Cache: Error from cloudfront < Via: 1.1 1915b8b49d2fbff532431a79650103eb.cloudfront.net (CloudFront) < X-Amz-Cf-Id: cxU2_b5DzIw4M_n3hJBFXTu9AVRBL3GpbQqUId9IxgS004DfLYqYmg== < * Connection
If I wrap the body with double quotes, it works fine:
% curl -v -X POST -d '"name=Ignacio&city=Tehuixtla"' https://rl9b6lh8gk.execute-api.us-east-1.amazonaws.com/prod/mandrillListener * Trying 54.230.227.19... * Connected to rl9b6lh8gk.execute-api.us-east-1.amazonaws.com (54.230.227.19) port 443 (#0) * TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * Server certificate: *.execute-api.us-east-1.amazonaws.com * Server certificate: Symantec Class 3 Secure Server CA - G4 * Server certificate: VeriSign Class 3 Public Primary Certification Authority - G5 > POST /prod/mandrillListener HTTP/1.1 > Host: rl9b6lh8gk.execute-api.us-east-1.amazonaws.com > User-Agent: curl/7.43.0 > Accept: */* > Content-Length: 29 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 29 out of 29 bytes < HTTP/1.1 200 OK < Content-Type: application/json < Content-Length: 6 < Connection: keep-alive < Date: Thu, 28 Jan 2016 12:33:20 GMT < x-amzn-RequestId: 50610606-c5bb-11e5-b140-5d837ffe26ed < X-Cache: Miss from cloudfront < Via: 1.1 a670cda0e28541e40881b95b60c672b7.cloudfront.net (CloudFront) < X-Amz-Cf-Id: mCLKL4eOnpUMd15IXQZw0RStJHw9Vdf3ivdCl37dcmno2JFOfxw0Vg== < * Connection
lamba has only one line:
context.succeed('true');
How can I make the api gateway not treat the body like json?
I tried the template matching documentation without any success, even tried to convert it to a static template without any variables! In all cases, an error occurs before proceeding to my code.
amazon-web-services aws-lambda aws-api-gateway
Jonas fagundes
source share