Php 以x-www-form-urlencoded格式将数据从aws api网关发送到http端点

Php 以x-www-form-urlencoded格式将数据从aws api网关发送到http端点,php,amazon-web-services,aws-api-gateway,Php,Amazon Web Services,Aws Api Gateway,我有一个AWS API网关代理方法。如果我将数据发布到AWSAPI网关,那么AWSAPI网关将数据发布到我的PHP后端。我在API网关中有此映射模板: { "body-json" : $input.json('$'), "context" : { "cognito-identity-id" : "$context.identity.cognitoIdentityId" } } 问题在于API网关以JSON格式发布数据。PHP不理解JSON(内容类型应用程

我有一个AWS API网关代理方法。如果我将数据发布到AWSAPI网关,那么AWSAPI网关将数据发布到我的PHP后端。我在API网关中有此映射模板:

{
    "body-json" : $input.json('$'),
    "context" : {
        "cognito-identity-id" : "$context.identity.cognitoIdentityId"
    }
}

问题在于API网关以JSON格式发布数据。PHP不理解JSON(内容类型应用程序/JSON),$\u POST数组为空。PHP理解application/x-www-form-urlencoded格式。如何使AWS API网关以x-www-form-urlencoded格式发送数据?

愚蠢的问题,但您尝试过吗


这将从该json生成一个关联PHP数组。

愚蠢的问题,但您尝试过吗


它将从该json生成关联PHP数组。

Amazon API网关使用以下逻辑选择映射模板:

当请求中缺少内容类型头时,API网关假定其默认值为application/json。对于这样的请求,API网关使用application/json作为默认键来选择映射模板(如果定义了映射模板)。如果passthroughBehavior属性设置为When_no_MATCH或When_no_TEMPLATES,则当没有模板与此键匹配时,API网关将有效负载通过unmap传递

当请求中未指定Accept头时,API网关假定其默认值为application/json。在这种情况下,API网关为application/json选择一个现有的映射模板来映射响应负载。如果没有为application/json定义模板,API网关将选择第一个现有模板,并将其用作映射响应负载的默认模板。类似地,当指定的Accept标头值与任何现有模板键不匹配时,API网关将使用第一个现有模板。如果未定义模板,则API网关仅通过未映射传递响应负载

例如,假设一个API为请求负载定义了一个application/json模板,并为响应负载定义了一个application/xml模板。如果客户端在请求中设置了“Content-Type:application/json”和“Accept:application/xml”头,那么请求和响应有效负载都将使用相应的映射模板进行处理。如果不存在Accept:application/xml头,则将使用application/xml映射模板映射响应负载。要返回未映射的响应负载,必须为application/json设置一个空模板

选择映射模板时,仅从Accept和Content type头使用MIME类型。例如,“Content-Type:application/json;charset=UTF-8”标题将有一个选择了application/json键的请求模板


来源:

Amazon API网关使用以下逻辑选择映射模板:

当请求中缺少内容类型头时,API网关假定其默认值为application/json。对于这样的请求,API网关使用application/json作为默认键来选择映射模板(如果定义了映射模板)。如果passthroughBehavior属性设置为When_no_MATCH或When_no_TEMPLATES,则当没有模板与此键匹配时,API网关将有效负载通过unmap传递

当请求中未指定Accept头时,API网关假定其默认值为application/json。在这种情况下,API网关为application/json选择一个现有的映射模板来映射响应负载。如果没有为application/json定义模板,API网关将选择第一个现有模板,并将其用作映射响应负载的默认模板。类似地,当指定的Accept标头值与任何现有模板键不匹配时,API网关将使用第一个现有模板。如果未定义模板,则API网关仅通过未映射传递响应负载

例如,假设一个API为请求负载定义了一个application/json模板,并为响应负载定义了一个application/xml模板。如果客户端在请求中设置了“Content-Type:application/json”和“Accept:application/xml”头,那么请求和响应有效负载都将使用相应的映射模板进行处理。如果不存在Accept:application/xml头,则将使用application/xml映射模板映射响应负载。要返回未映射的响应负载,必须为application/json设置一个空模板

选择映射模板时,仅从Accept和Content type头使用MIME类型。例如,“Content-Type:application/json;charset=UTF-8”标题将有一个选择了application/json键的请求模板


来源:

没有。我没有访问PHP后端的权限。我想在AWSAPI网关侧解决这个问题。您的问题是PHP无法解析JSON(这是不准确的)。我会编辑你的原始问题,以便更好地定义你的局限性。JavaScript还可以用来解析JSON,比如JSON.parse(yourJSON);没有。我没有访问PHP后端的权限。我想在AWSAPI网关侧解决这个问题。您的问题是PHP无法解析JSON(这是不准确的)。我会编辑你的原始问题,以便更好地定义你的局限性。JavaScript还可以用来解析JSON,比如JSON.parse(yourJSON);
    $json = '{
       "body-json" : $input.json(\'$\'),
       "context" : {
        "cognito-identity-id" : "$context.identity.cognitoIdentityId"
       }
     }';

$phpArray = json_decode($json, true);