.NET(C#)下的移动彩信MM7协议研究之路(二)
来源:互联网 发布:led编辑软件下载 编辑:程序博客网 时间:2024/06/04 19:38
二:本次介绍彩信POST信息构成分析。SOAPDecode类构造与Envolope信息留至下篇吧。
首先,我们来看一个彩信包包头的示例:
包头部分:
POST /MMS/Receiver HTTP/1.1content-type: multipart/related; boundary="--NextPart_0_6192_87016";type="text/xml";start="</tnn-200102/mm7-vasp>"content-length: 41184soapaction: ""x-mms-huawei-mm7-rcptto: 10658000cache-control: no-cachepragma: no-cacheuser-agent: Java/1.5.0_16host: 192.168.1.10:8080accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2connection: keep-alive
包头部分可以使用以下C#代码输出:
StringBuilder strHeader = new StringBuilder();strHeader.AppendLine(string.Format("{0} {1} {2}",Request.HttpMethod, Request.FilePath, "HTTP/1.1")); //这个HTTP/1.1用什么办法获取,谁知道指教下?foreach (var item in Request.Headers){ strHeader.AppendLine(string.Format("{0}:{1}", item, Request.Headers[item.ToString()]));}
彩信包头中,重要的是Content-Type与Content-Length这两部分。
Content-Type:multipart/related表明这次请求分多部分,boundary="--NextPart_0_6192_87016"表示各部分的分隔符是"--NextPart_0_6192_87016",start="</tnn-200102/mm7-vasp>"表示开始部分的Content-ID为"</tnn-200102/mm7-vasp>"。
Content-Length表示这次请求内容的主体长度。请求的主体可以用Request.InputStream来获取(在java中需要根据主体长度循环读取InputStream,C#中暂未实验,等实验后再更新)。
好了。彩信包头的信息就介绍到这。至于好多规范中说的可能还有MIME-Version: 1.0的字段,这个我抓包时发现移动的没传,解析中也没有用到这字段的地方,忽略吧。
下面看看彩信包主体示例:(主体较长,有41KB,除了标记,内容部分用......省略了)
----NextPart_0_6192_87016Content-Type: text/xml;charset="UTF-8"Content-Transfer-Encoding: 8bitContent-ID: </tnn-200102/mm7-vasp><?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header><mm7:TransactionID xmlns:mm7="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0" env:mustUnderstand="1">0730000009740120813230806001</mm7:TransactionID></env:Header><env:Body><DeliverReq xmlns="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0"><MM7Version>6.3.0</MM7Version><Sender>+8613900000000</Sender><Recipients><To><Number>10658000</Number></To></Recipients><TimeStamp>2012-08-13T23:08:06+08:00</TimeStamp><Priority>Normal</Priority><Subject>转发:中国移动信息</Subject><MMSRelayServerID>900000</MMSRelayServerID><ReplyChargingID></ReplyChargingID><Content href="cid:defaultID"/></DeliverReq></env:Body></env:Envelope>----NextPart_0_6192_87016Content-Type:multipart/related;start="<smil-part>";type="application/smil";boundary="SubPart_1_2339_28544"Content-ID:defaultID--SubPart_1_2339_28544Content-Type:application/smil;name="SMIL.smil"Content-ID:<smil-part>Content-Location:SMIL.smilContent-Transfer-Encoding: 8bit......--SubPart_1_2339_28544Content-Type:text/plain;charset="UTF-8";name="3067296.txt"Content-ID:<2733504>Content-Location:3067296.txtContent-Transfer-Encoding: 8bit......--SubPart_1_2339_28544Content-Type:image/jpeg;name="cover.jpg"Content-ID:<2733600>Content-Location:cover.jpgContent-Transfer-Encoding: 8bit......--SubPart_1_2339_28544Content-Type:text/plain;charset="UTF-8";name="2973696.txt"Content-ID:<2735504>Content-Location:2973696.txtContent-Transfer-Encoding: 8bit......--SubPart_1_2339_28544------NextPart_0_6192_87016--
彩信包中,用包头是提到的分隔符"--NextPart_0_6192_87016"做分割,可以得到两部分内容:第一部分为Content-ID为包头中start指定的,即Envelop的xml文件,第二部分为主体文件列表,又以以下部分开头:
Content-Type:multipart/related;start="<smil-part>";type="application/smil";boundary="SubPart_1_2339_28544"Content-ID:defaultID从这部分信息中,可以看出:接下来的第二部分内容,是以"SubPart_1_2339_28544"作分割的子内容。
再看看子内容部分:
--SubPart_1_2339_28544Content-Type:text/plain;charset="UTF-8";name="2973696.txt"Content-ID:<2735504>Content-Location:2973696.txtContent-Transfer-Encoding: 8bit......子内容部分又分为信息头与主体部分,以两个\r\n\r\n分割。说明了此部分文件类型、文件名、ID、编码方式等信息。
今天先到这吧。接下来的事情就是将这些各部分文件分割,得到具体文件内容,并解析Envelop信息。
- .NET(C#)下的移动彩信MM7协议研究之路(二)
- .NET(C#)下的移动彩信MM7协议研究之路(一:题记)
- 由彩信MM7协议引起的对HTTP和SOAP协议的研究
- 彩信MM7协议Soap包
- 蓝杰MM7协议彩信网关
- WAP协议研究-彩信的传输
- WAP协议研究—彩信的传输
- mm7 彩信发送方法
- MM7彩信标准规范
- Gensee移动SDK之(二)协议
- MM7 API(1)
- (短信、彩信、语音)协议
- .NET 发送电信彩信 组包(二)
- 联通MM7彩信平台技术
- 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(二,发送彩信<1>)
- 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(二,发送彩信<2>)
- WAP协议研究笔记—彩信的传输
- WAP协议研究笔记—彩信的传输
- 关闭页面和刷新页面后 触发服务器事件 采用body的onbeforeunload()方法
- 下载文件的四种方法 C#篇收藏
- anaconda安装程序分析
- SQLite数据库
- 谈微信营销
- .NET(C#)下的移动彩信MM7协议研究之路(二)
- 什么是Nib文件
- anaconda安装程序分析2
- iphone UIKit类得中文讲解1
- 图像介绍
- 虚拟地球原理与实现
- Google会成为苹果的下一个目标吗?
- Oracle表与索引的分析及索引重建
- iphone UIKit类得中文讲解2