给我一发566 2019-11-27 16:27 采纳率: 0%
浏览 427

py3amf报错:pyamf.DecodeError: Malformed stream (amfVersion=2659)

网站采用flash加载,response返回的数据经过amf格式编码
我的环境是windows10+python3.7,调用py3amf时候出现错误
图片说明

我的代码为:

from py3amf import remoting

...

resp_msg = remoting.decode(resp.content)

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 07:47
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Python中,pyamf库使用amf(Application-Defined Message Format)格式进行数据编码和解码。当您尝试从一个Flash文件(.fla.swf)中读取响应时,出现 pyamf.DecodeError: Malformed stream (amfVersion=2659) 错误时,这通常意味着在尝试解析 Flash 文件中的 AMF 文档时遇到了一些问题。

    以下是一些可能的解决方案:

    1. 确认 Flash 文件格式

      • 确保您正在尝试的 Flash 文件确实是一种 AMF 格式。AMF 是一种标准的应用程序定义消息格式,用于描述和传输应用程序相关的数据。
      • 在您的项目中,确保已经安装了与您使用的 Flash 文件格式相关的库,例如 PyAMF 或 Adobe AIR 等。这些库支持解析和序列化 Flash 文件的各种数据类型。
    2. 检查 Flash 文件内容

      • 打开 Flash 文件,查看其元数据(帧信息、事件控制点等)。通过 AmfReader 类可以从字节流中读取数据,并查看相关的 Amf 标签(<x-amf>, <x-amf-frame> 等),以及常见的 AMF 语义块(如 datamessage 等)。
      • 如果您的 Flash 文件包含未定义的或错误的数据结构,或者缺失了一些基本 AMF 语义块,可能会导致解析错误。您可以检查这些特定的标签是否存在于您的元数据或源代码中,并确保它们被正确地转换为指定的数据类型。
    3. 使用正确的 Python 编译器和模块

      • 由于 .fla.swf 文件都是纯文本文件,所以直接运行上述代码将直接抛出 pyamf.DecodeError 异常。确保在运行您的代码之前,首先将脚本编译为适当的 Python 模块并添加到系统PATH,这样它才能查找和执行所需的 Python 脚本。
    4. 设置 AMF 消息的版本

      • 完整的 AMF 文档通常包括一个或多个版本,每个版本都有不同的注释和属性描述。检查您的 Flash 文件的元数据,确认它包含当前或预期的 AMF 版本。如果AMF版本不匹配,则可能会导致解析错误。
    5. 使用合适的 .fla 解析器

      • 相对于 PyAMF 库,大多数现代 Flash 动画工具(如 Adobe AIR、Animate CC)提供了专门的 Flash 文档解析器,可以直接与 AMF 通信并解析动画的特定部分。
      • 首先,使用 amfReadFromText() 函数从文本对象(如 Flash Player 的 .fla.swf 文件)读取可读元数据。然后,根据元数据获取正确的 AMF 封装实例,最后调用 Decode 方法进行解码操作。
    6. 尝试其他方法

      • 如果以上所有步骤都无法解决问题,可以尝试使用其他的编程语言或库来读取 Flash 文件。比如,如果您使用的是 C++ 库,如 OpenAL 或 MoltenVK,可以编写相应的代码以支持 AMF 数据读取。Python 中可以考虑使用第三方库如 PyFFmpeg 或 Python AMF libraries(https://github.com/amflibrary/python-amf)来处理此场景。

    综上所述,解决 pyamf.DecodeError: Malformed stream (amfVersion=2659) 错误的关键在于确定 Flash 文件的正确格式,确保您的代码具有支持该格式的库,并且与示例代码保持一致。通过尝试多种可能的解决方案,您应该能够找到适合您的具体环境下的修复方式。如果问题仍然存在,可能需要寻求专业的 Flash 原生开发者或支持人员的帮助。

    评论

报告相同问题?

悬赏问题

  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题