模拟客户端请求,amf请求 封包,目前只有c#版本的,我没学过c#,想把它翻译成php版本的,但是非常蛋疼啊。想问下目前网上有类似功能的类库了吗?或者已经有相同功能的代码了吗?
class amf_post_data { public list message; /// /// 初始化message /// /// /// /// public amf_post_data(amftype at, int headers, int bodies) { //amf版本 if (at == amftype.amf0) { message = new list(new byte[] { 0x00, 0x00 }); } else if (at == amftype.amf3) { message = new list(new byte[] { 0x00, 0x03 }); } //header数量 message.add(bitconverter.getbytes(headers)[1]); message.add(bitconverter.getbytes(headers)[0]); //body数量 message.add(bitconverter.getbytes(bodies)[1]); message.add(bitconverter.getbytes(bodies)[0]); } /// /// 添加target /// /// /// public void addtargetandresponse(string target, string response) { //添加target长度 message.add(bitconverter.getbytes(target.length)[1]); message.add(bitconverter.getbytes(target.length)[0]); //添加target内容 message.addrange(encoding.default.getbytes(target)); //添加response长度 message.add(bitconverter.getbytes(response.length)[1]); message.add(bitconverter.getbytes(response.length)[0]); //添加response内容 message.addrange(encoding.default.getbytes(response)); } /// /// 添加body /// /// /// public void addbody(amf_post_data_body apdb) { message.addrange(apdb.getlength()); message.addrange(apdb.content.toarray()); } } class amf_post_data_body { private byte[] length = new byte[4]; public list content = new list(); /// /// 初始化body /// /// /// public amf_post_data_body(datatype dt, int arraylength) { //添加类型标识 content.add((byte)dt); //数组的话添加长度 if (dt == datatype.array) { content.add(bitconverter.getbytes(arraylength)[3]); content.add(bitconverter.getbytes(arraylength)[2]); content.add(bitconverter.getbytes(arraylength)[1]); content.add(bitconverter.getbytes(arraylength)[0]); } } public void adddata(datatype dt, string value) { //添加类型标识 content.add((byte)dt); switch (dt) { case datatype.number: adddata_number(double.parse(value)); break; case datatype.string: adddata_string(value); break; case datatype.boolean: adddata_boolean(boolean.parse(value)); break; } } #region 更种类型处理方法 /// /// boolean /// /// private void adddata_boolean(bool p) { if (p) content.add(0x01); else content.add(0x00); } /// /// string /// /// private void adddata_string(string value) { //添加长度 content.add(bitconverter.getbytes(value.length)[1]); content.add(bitconverter.getbytes(value.length)[0]); //添加内容 content.addrange(encoding.default.getbytes(value)); } /// /// number /// /// private void adddata_number(double p) { byte[] b = new byte[8]; b = bitconverter.getbytes(p); for (int i = 7; i > -1; i--) { content.add(b); } } #endregion public byte[] getlength() { length[0] = bitconverter.getbytes(content.count)[3]; length[1] = bitconverter.getbytes(content.count)[2]; length[2] = bitconverter.getbytes(content.count)[1]; length[3] = bitconverter.getbytes(content.count)[0]; return length; } } #region 类型枚举 public enum amftype { amf0, amf3 } public enum datatype { number = 0, boolean = 1, string = 2, untypedobject = 3, movieclip = 4, null = 5, undefined = 6, referencedobject = 7, mixedarray = 8, end = 9, array = 10,//0x0a date = 11,//0x0b longstring = 12,//0x0c typeasobject = 13,//0x0d recordset = 14,//0x0e xml = 15,//0x0f typedobject = 16,//0x10 amf3data = 17//0x11 } #endregion
回复讨论(解决方案) amfphp 是php的rpc工具,它可以使php与下述技术无缝通信:
flash 和 flex remoting
javascript json 和 ajax json
xml 和xml-rpc
你自己可以搜索一下这个类
至于将 c# 代码移植到 php 也是可以的,不过你需要对两者都熟悉。并且对工作流程也需要很熟悉
amfphp 是php的rpc工具,它可以使php与下述技术无缝通信:
flash 和 flex remoting
javascript json 和 ajax json
xml 和xml-rpc
你自己可以搜索一下这个类
至于将 c# 代码移植到 php 也是可以的,不过你需要对两者都熟悉。并且对工作流程也需要很熟悉
amfphp 我看过啊。他只是服务端。接收flex或者js或者flash发出的请求。现在我要用php发送请求,不是flex。我不是单单实现rpc才这样做的,是要到网上抓数据。
服务端不是要接收数据吗?
如果是经编码的,不也是要解码的吗?
好了,你倒过来做不就知道什么样的数据开怎么样发送了吗?
服务端不是要接收数据吗?
如果是经编码的,不也是要解码的吗?
好了,你倒过来做不就知道什么样的数据开怎么样发送了吗?
你这个也是一个思路,问题又回到自己熟悉的php的层面,总比研究flex或者c#代码好。
你找份 amf 通讯协议的文档看看不就知道该怎么做了?
你找份 amf 通讯协议的文档看看不就知道该怎么做了?
本来毫无头绪,你这两句话提醒了我,谢谢