【问题标题】:AWS API Gateway and Python Lambda returning HTMLAWS API Gateway 和 Python Lambda 返回 HTML
【发布时间】:2017-04-19 04:46:22
【问题描述】:

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

任何我可能做错的建议

谢谢

【问题讨论】:

  • 忘了说,运行“TEST”可以工作并返回 3DMUVEtest 但实际上是使用 URL https:// {my api} .execute-api.us-east-1.amazonaws.com/prod/api/v1/ 访问页面
     3DMUVEtest 中的生物/测试结果 
  • 我猜有两件事:1. 您是否将正确的 Accept 标头和/或 Content-Type 标头发送到 API 并从 Lambda 函数返回? 2. 您是否部署了 API 的最新更改?

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


【解决方案1】:

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

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

例如:

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

【讨论】:

    【解决方案2】:

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

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

    .

    {
        "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

    【讨论】:

    • Windsch:node.js 中的上述链接。 Is there any way to render HTML page using AWS Lambda function in PYTHON
    【解决方案3】:

    尝试: response_body = "&lt;HTML&gt;&lt;Title&gt;Title&lt;/Title&gt;&lt;/HTML&gt;"

    终于:

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

    这只是大卫林答案的代码说明

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2018-02-14
      • 2018-11-28
      • 2017-09-07
      • 2021-03-30
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多