在 Google App Engine 上处理 XML 需用 xml.etree.ElementTree 等标准库解析请求体或远程文件,禁用外部实体防 XXE,设置正确 Content-Type 返回 XML 响应,并通过 Cloud Storage 或 URL 获取外部 XML。
在 Google App Engine(GAE)上处理 XML 数据,核心是使用 Python 标准库(如 xml.etree.ElementTree 或 xml.sax)解析请求体或外部 XML 文件,同时注意 GAE 的运行时限制(如无文件系统写入、超时、内存限制)和部署环境差异(如 Python 3 运行时已弃用 `webapp2`,推荐使用 Flask 或 FastAPI)。
当客户端以 application/xml 或 text/xml 发送 XML 数据时,需从请求体中读取原始字节并解析:
中:用 request.get_data() 获取原始内容,再传给 ET.fromstring()
request.form(它只处理 URL 编码表单),XML 不适用ET.ParseError,防止恶意或格式错误的 XML 导致 500 错误GAE 应用常暴露在公网,必须禁用外部实体(XXE)以避免敏感文件读取或 SSRF:
xml.dom.minidom.parse() 或默认的 ET.XMLParser()
parser = ET.XMLParser(resolve_entities=False, dtd_validation=False)root = ET.fromstring(xml_bytes, parser=parser)
defusedxml 库(需在 requirements.txt 中声明)构造 XML 并作为响应返回时,注意设置正确 Content-Type 和编码:
ET.tostring(root, encoding='utf-8', method='xml') 生成字节流mimetype='application/xml' 或 'text/xml'
),设 xml_declaration=True
GAE 无法访问本地磁盘,外部 XML 通常来自 Cloud Storage、URL 或 Datastore:
client.bucket('my-bucket').blob('data.xml').download_as_bytes()
requests):注意设置超时(GAE 默认请求限时 60 秒)