Aws lambda AWS apigateway是否更改http正文?我怎样才能阻止它这样做?

Aws lambda AWS apigateway是否更改http正文?我怎样才能阻止它这样做?,aws-lambda,http-post,aws-api-gateway,multipartform-data,unzip,Aws Lambda,Http Post,Aws Api Gateway,Multipartform Data,Unzip,AWS apigateway是否更改http正文?我怎样才能阻止它这样做 我的申请: (1) 前端“UI”,使用“POST方法”发送“http请求”,该方法通过“表单数据”在“body”中包含“zip文件” (2) AWS“apigateway”接收此请求并将其转发给“Lambda Proxy” (3) 由python编码实现的AWS“Lambda”接收此请求并将此zip文件解压缩到临时文件夹 我面临的问题是: (1) (2)工作正常,但在(3)中,lambda的pythong程序未能解压缩文件

AWS apigateway是否更改http正文?我怎样才能阻止它这样做

我的申请:

(1) 前端“UI”,使用“POST方法”发送“http请求”,该方法通过“表单数据”在“body”中包含“zip文件”

(2) AWS“apigateway”接收此请求并将其转发给“Lambda Proxy”

(3) 由python编码实现的AWS“Lambda”接收此请求并将此zip文件解压缩到临时文件夹

我面临的问题是: (1) (2)工作正常,但在(3)中,lambda的pythong程序未能解压缩文件

我的发现:

从“UI”发送时,主体似乎包含zip文件的二进制数据 如下图所示:

response = {
    "statusCode": 200,
    "headers": {
        "lambda-response": str(event["body"])
    },
    "body": "",
    "isBase64Encoded": False
}
“PK\x03\x04\n\x00\x00\x00\x00\x00\x00\xd6;至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00x2.txtPK\x03\x04\n\x00\x00\x00\x00\xd6;发送至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00x1.txtPK\x01\x02\x14\x00\n\x00\x00\x00\x00\x46;至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00x2.txtPK\x01\x02\x14\x00\n\x00\x00\x00\x00\x00\x00\x00\xd6;至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00$\x00\x00\x00x1.txtPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00h\x00\x00\x00h\x00\x00\x00\x00

但是在(3)中,如果我们只是简单地返回如下响应,那么在lambda的python代码中:

response = {
    "statusCode": 200,
    "headers": {
        "lambda-response": str(event["body"])
    },
    "body": "",
    "isBase64Encoded": False
}
返回响应

会发现体内的二进制数据, 似乎apigateway已经更改了内容

发件人:

“PK\x03\x04\n\x00\x00\x00\x00\x00\x00\xd6;至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00x2.txtPK\x03\x04\n\x00\x00\x00\x00\xd6;发送至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00x1.txtPK\x01\x02\x14\x00\n\x00\x00\x00\x00\x46;至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00x2.txtPK\x01\x02\x14\x00\n\x00\x00\x00\x00\x00\x00\x00\xd6;至\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00$\x00\x00\x00x1.txtPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00h\x00\x00\x00h\x00\x00\x00\x00

进入:

“PK\u0003\u0004\n\u0000\u0000\u0000\u0000\u0000\ufffd;至\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u000x2.txtPK\u0003\u0004\n\u0000\u0000\u0000\uffd;至\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u000x1.txtPK\u0001\u0002\u0014\u0000\n\u0000\u0000\u0000\u0000\uffd;至\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000x2.txtPK\u0001\u0002\u0014\u0000\n\u0000\u0000\u0000\u0000\u0000\ufffd;至\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000$\u0000\u0000\U000X1.txtPK\u0005\u0006\u0000\u0000\u0000\u0002\u0000\u0002\u0000h\u0000\u0000\u0000\u0000h\u0000\u0000\u0000\u0000\u0000\r\n“

这很奇怪,我能做些什么来阻止这一切

(2019/12/17更新)低于我使用的lambda代码

import json#解码json
导入操作系统#文件IO
导入shutil#文件IO(使用此命令递归强制删除目录)
打印('加载函数')
def解压压缩文件(src文件路径、目的目录路径):
'''
将zip文件解压缩到目录中。
Args:
src_file_path(Srting):源zip文件的路径。
dest_dir_path(Srting):输出目录的目标。
返回:
isSuccess(bool):操作是否成功。
'''
error\u msg=“无任何内容。”
尝试:
if(os.path.isdir(dest_dir_path)):
shutil.rmtree(dest\u dir\u路径)
zipfile.zipfile(src_file_path,'r')作为zip_参考:
zip_ref.extractall(目标目录路径)
除作为ep的例外情况外:
error_msg=“error in decompression_zip_file(),ep={}:{}”。格式(type(ep)。uuuu name_uuu,str(ep))
打印(错误消息)
返回(错误,错误消息)
返回(真,错误消息)
def从二进制文件中的内容解压缩压缩文件(二进制文件中的src文件,dest目录路径):
'''
将zip文件内容解压缩到目录中。
Args:
二进制(字节数组)格式的src_文件:二进制格式的源zip文件内容。
dest_dir_path(Srting):输出目录的目标。
返回:
isSuccess(bool):操作是否成功。
'''
#将获得的二进制数据写入tmp zip文件
tmp_file_path=“/tmp/tmp.zip”
如果(os.path.isfile(tmp_文件_路径)):
删除(tmp_文件_路径)
输出文件=打开(tmp文件路径“wb”)
output\u file.write(二进制的src\u文件)
输出_文件。关闭()
(isSuccess,error_msg)=解压缩压缩文件(tmp_文件路径,dest_目录路径)
返回(isSuccess,错误消息)
def将_从_http_body_encoding_转换为_local_binary(从_http_body_str提取的_文件):
'''
将文件(二进制字符串格式)从事件['body']编码提取为本地二进制编码。
Args:
从\u http\u body\u str(字符串)中提取的\u file\u:事件['body']文件(二进制字符串格式),。
返回:
zipfile_binary1(二进制数组):转换结果。
'''
zipfile_binary1=字节(从http_body_str提取的文件,encoding=“ascii”)#转换为二进制格式的zipfile
返回zipfile_binary1
def从正文(正文)中提取二进制文件:
'''
从事件['body']字符串中提取zipfile(二进制格式)。
Args:
body_str(string):事件['body']字符串。
返回:
(二进制数组):转换结果。
'''
retValue=“”
tmpArray=body_str.split(“应用程序/zip”)#基于MIME拆分内容

POST /stg-with-logs HTTP/1.1
Host: <some-api-id>.execute-api.us-east-1.amazonaws.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Accept: multipart/form-data
Cache-Control: no-cache
Postman-Token: 123b64f9-5669-f794-b9df-34a7561e9708

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="File"; filename="archive.zip"
Content-Type: application/zip


------WebKitFormBoundary7MA4YWxkTrZu0gW--


(a6729f56-b245-45a4-9ac4-7e00b23c8957) Endpoint response body before transformations: 
{
    "isBase64Encoded": true,
    "statusCode": 200,
    "headers": {
        "Content-Type": "multipart/form-data",
        "Accpet": "multipart/form-data"
    },
    "body": "LS0tLS0tV2ViS2l0Rm9ybUJvdW5kYXJ5SmxkSW1aV1lHczlSTndPWQ0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJGaWxlIjsgZmlsZW5hbWU9ImFyY2hpdmUuemlwIg0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi96aXANCg0KUEsDBBQAAAAIAKF4kE9/Mo7/XgAAAJcAAAAaABwASGVsbG8tV29ybGQtNjY3MzMxNTI4MS50eHRVVAkAA8ZP910SUPdddXgLAAEEHZHreQTMewNxNY1BDgIxDAPvvIVPOY3SEC+9WCrfJ13EZWTNHKwKkzMmxIp5dpsnFMlqrjzBF/SKxCW2/8dl3ttGGjTqnkdMG+Wwj96jA3/YJsC2QF9iesuLUXPfv80KrpaVYeDjC1BLAQIeAxQAAAAIAKF4kE9/Mo7/XgAAAJcAAAAaABgAAAAAAAEAAACkgQAAAABIZWxsby1Xb3JsZC02NjczMzE1MjgxLnR4dFVUBQADxk/3XXV4CwABBB2R63kEzHsDcVBLBQYAAAAAAQABAGAAAACyAAAAAAANCi0tLS0tLVdlYktpdEZvcm1Cb3VuZGFyeUpsZEltWldZR3M5Uk53T1kNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iVGVzdCBEYXRhIg0KDQpUZXN0aW5nIEJvdW5kYXJ5IGluIG11bHRpcGFydC9mb3JtLWRhdGENCi0tLS0tLVdlYktpdEZvcm1Cb3VuZGFyeUpsZEltWldZR3M5Uk53T1ktLQ0K"
}