AWS API Gateway和Python Lambda返回HTML

时间:2016-12-04 20:29:37

标签: python html api amazon-web-services aws-api-gateway

我正在尝试使用API​​ GW从我的python lambda ftn返回一个网页。相反,我将我的页面嵌入到正文中的标记中,而不是返回值是整页(标题,正文等等...没有pre>

任何建议我可能做错了

由于

3 个答案:

答案 0 :(得分:4)

您看到的<pre>标记是浏览器试图向您显示从服务器返回的文本。它不是Lambda函数返回的一部分。

要使其正常工作,您需要让lambda函数设置响应HTTP标头Content-Type: 'text/html'

例如:

response = {
    "statusCode": 200,
    "body": content,
    "headers": {
        'Content-Type': 'text/html',
    }
}

答案 1 :(得分:1)

您必须配置API网关以返回正确的Content-Type。

  1. 在API网关中,单击您创建的API
  2. 点击“方法响应”
  3. 展开“方法”响应状态200的行。单击“添加标题”,然后添加“内容类型”条目。
  4. 返回您通过单击“ <-方法执行”创建的API
  5. 点击“集成响应”
  6. 展开方法响应状态为200的行
  7. 点击“添加映射模板”
  8. 在“ Content-Type”中键入不带引号的“ text / html”,然后单击复选框按钮
  9. 在模板区域中,键入JsonPath,该映射将lambda函数返回的json部分映射到返回给客户端的内容。例如,如果您的json是,请输入$input.path('body')

{
    "statusCode": 200,
    "body": "<html><body><h1>Test</h1></body></html>,
}
  1. 请务必在测试之前部署API。

Here's a more detailed article on how to return html from AWS Lambda

答案 2 :(得分:0)

尝试:   response_body = "<HTML><Title>Title</Title></HTML>"

最后:

return {
    "statusCode": 200,
    "body": response_body,
    "headers": {
        'Content-Type': 'text/html',
    }
}

这是David Lin答案的公正代码