python获取网页amf的信息

本文介绍如何使用pyamf库及Charles工具解析AMF协议,包括构造请求头、编码AMF数据并发送请求,最后解码服务器响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先解释一波什么是amf:AMF(Action Message Format)是Flash与服务端通信的一种常见的二进制编码模式,其传输效率高,可以在HTTP层面上传输。现在很多Flash WebGame都采用这样的消息格式。那么我们怎么获取其中的信息呢?我们需要用到pyamf这个库,同时为了方便构造请求头和解析数据包需要用到Charles。
首先通过charles去查看请求头,然后模仿这个头给服务器发送请求。
这里写图片描述
具体的不多说,给出少许代码(怕被查水表~_~)

msg = messaging.RemotingMessage(messageId=id1,  
                                clientId=id,  
                                operation='',  
                                destination='',  
                                timeToLive=0,  
                                timestamp=0)  
search_time = '2017-08-17'
msg.body = []#根据body添加  
msg.headers['DSEndpoint'] = 'my-amf'  
msg.headers['DSId'] = id  
# 按AMF协议编码数据  
req = remoting.Request('null', body=(msg,))  
env = remoting.Envelope(amfVersion=pyamf.AMF3)  
env.bodies = [('/1', req)]  
data = bytes(remoting.encode(env).read())  
header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding': 'gzip, deflate',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-amf'
         }

# 提交请求  
url = ''  
req = requests.post(url, data, headers=header)  


# 解码AMF协议返回的数据  
resp = remoting.decode(req.content)
我在用易语言写网页游戏的脱机代码 里面碰到了amf协议 错误:未定义的AMF0数据型:93 这是我代码执行的结果,下面是我的代码: .版本 2 .子程序 获取普通物品信息 .局部变量 amf数据, 类_AMF数据 .局部变量 处理数据, 类_AMF数据 .局部变量 请求数据, 变体型 .局部变量 返回数据, 变体型 .局部变量 返回文本, 文本型 .局部变量 n, 整数型 .局部变量 物品名称, 文本型 .局部变量 物品数量, 文本型 .局部变量 索引, 整数型 .局部变量 普通物品id, 文本型 .局部变量 普通物品名称, 文本型 .局部变量 普通物品持有数量, 文本型 .局部变量 普通物品正则结果, 文本型, , "500,500" .局部变量 普通物品筛选文本前置1, 文本型 .局部变量 普通物品筛选文本后置, 文本型 .局部变量 普通物品筛选文本前置2, 文本型 .局部变量 银票id, 文本型 amf数据.置文本 (“source”, “ServicesManager”) amf数据.置文本 (“operation”, “ItemGetCommonList”) amf数据.置空值 (“clientId”) amf数据.置数值 (“timeToLive”, 0) amf数据.置文本 (“destination”, “amfphp”) amf数据.置空值 (“body”) amf数据.置文本 (“messageId”, “D20DFAD3-16B7-C09B-1C77-89C5CC7BA9C8”) amf数据.置数值 (“timestamp”, 0) ' 输出调试文本 (amf数据.输出文本 ()) 请求数据 = 参数_自定义类 (“flex.messaging.messages.RemotingMessage”, amf数据) 返回数据AMF.发送请求 (, “null”, 请求数据) 返回文本 = 变体型到文本 (返回数据) 输出调试文本 (返回文本) 问题是同样的命令 我换个号执行就可以了,第一个号物品很多,第二个号物品很少 是不是说明 我写的代码没有问题,发的包没有问题。 那么错误:未定义的AMF0数据型:93 以及未定义的AMF0数据型:153 我问过其他的AI 都告诉我说我使用的模块不支持解析有些装备类型,因为可能是超出定义的AMF类型 但是我用charles能完美的解析出来 怎么能让我的脱机代码 正确返回服务器响应呢
最新发布
05-11
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值