最新要闻
- 迷惑!大妈凌晨骑车撞上路边停放车辆:怒斥司机不开车灯
- 黄桃罐头遭疯抢 厂家实诚回应“没药效” 网友调侃:你不懂
- 环球观焦点:曝Redmi K60系列依然将采用塑料支架 为了性价比?
- 注意!鲍鱼被列入濒危物种红色名录:20种或灭绝
- 10.3寸墨水屏!联想YOGA Paper墨水平板今日开售 3699元
- 梅西进4强 雷军点赞:阿根廷门将神了 太给力
- 全球微速讯:苹果要大赚!消息称iPhone 15又涨价 高端万元起:华为Mate60等跟涨吗
- 阿根廷点球大战淘汰荷兰:梅西点射破门 追平巴蒂纪录网友纷祝贺
- 国际领先!中国天眼获得银河系气体高清图像:揭露恒星诞生到消亡
- 世界热讯:巴西点球大战3-5克罗地亚!无缘四强 内马尔赛后痛哭
- 最轻折叠屏OPPO Find N2来了!朱海舟:上手后你会WOW一下
- 当前热点-负债585.68亿、工资发不出:国美获黄光裕公司贷款1.5亿港元
- 天天快讯:NVIDIA力推的光追版《传送门》游戏被指代码糟糕:AMD显卡坑了
- 零百加速3.8秒马力暴躁 蔚来全系车型试驾会郑州站开启
- 当前观点:后矿难时代 显卡价格仍居高不下
- 天天快消息!布洛芬不用抢 中国产能全球第一:一家公司就够33亿人用
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前速读:post表单数据格式完全解析multipart/form-data(C#实现)
post表单数据格式完全解析multipart/form-data
参数说明 (资料图片仅供参考) | 内容 |
boundary | boundary一个字符串,用以分隔不同的参数; string boundary = Guid.NewGuid().ToString(); 会生成如下字符串:9470b619-f08f-436e-a6b2-98fcb02b695b 也可以自定义一个比较复杂的字符串作为分隔符,例如@adsadsadsads123456789@ request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary; --boundary开始分隔符,也就是boundary之前加两个短划线,用以标记每一条数据的起始位置; --boundary--结束分隔符,也就是boundary之前和之后各加两个短划线,用以标记所有数据的结束位置; |
\r\n | 换行符\r\n,用以标记分隔符和参数声明之间、各参数声明之间、参数声明和参数值之间、参数值和下一条数据之间的分隔位置; --boundary和数据声明之间必须有且只有1个换行符; 各条数据声明之间有且只有1个换行符; 数据声明和数据值之间不少于2个换行符; 数据值和下一条数据之间至少1个换行符; |
其他参数 | CContent-Type:text/plain;charset=utf-8表示数据内容的格式为普通文本,编码格式为utf-8; Content-Disposition:form-data表示内容的处置方式,表示将内容作为formdata格式进行处理; name=\"sInputF\"表示传递参数的名称,或者叫键值、或者字段名称; 所有数据,无论是文本数据还是文件流数据,最终都以byte[]的格式进行传输; |
示例 | --boundary//第一条数据 数据声明1 数据声明2 数据 --boundary//第二条数据 数据声明1 数据声明2 数据 ... --boundary--//数据结束 |
结构详解
参数 | 项目 | 内容 |
开始 | 换行符 | 第一个开始分隔符前可以没有换行符\r\n |
参数1 sInputF 文件参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | Content-Disposition:form-data;name=\"sInputF\";filename=\"{Path.GetFileName(mDocPath)}\" | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Type:application/octet-stream | |
换行符 | 声明和数据值之间,至少要有2个换行符\r\n\r\n | |
数据值 | byte[] docFileBytes = ReadFileBytes(mDocPath); | |
换行符 | 至少1个换行符\r\n | |
参数2 sSealF 文件参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | Content-Disposition:form-data;name=\"sSealF\";filename=\"{Path.GetFileName(mSealPath)}\" | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Type:application/octet-stream | |
换行符 | 声明和数据值之间,至少要有2个换行符\r\n\r\n | |
数据值 | byte[] sealFileBytes = ReadFileBytes(mSealPath); | |
换行符 | 至少1个换行符\r\n | |
参数3 sPageNum 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"sPageNum\" | |
换行符 | 声明和数据值之间,至少要有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 至少1个换行符\r\n | |
参数4 fSealW 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealW\" | |
换行符 | 声明和数据值之间,至少要有2个换行符\r\n\r\n | |
数据值 | 100 | |
换行符 | 至少1个换行符\r\n | |
参数5 fSealH 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealH\" | |
换行符 | 声明和数据值之间,至少要有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 至少1个换行符\r\n | |
参数6 fSealPosX 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealPosX\" | |
换行符 | 声明和数据值之间,至少要有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 至少1个换行符\r\n | |
参数7 fSealPosY 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealPosY\" | |
换行符 | 声明和数据值之间,至少要有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 至少1个换行符\r\n | |
结束 | 结束分隔符 | "--" + boundary "--",结束分隔符之后可以没有换行符 |
源码1
voidRequest(stringurl) { HttpWebRequest request = WebRequest.CreateHttp(url);//创建request对象,不能通过构造函数创建 request.Method = "POST";//设置请求方法 GET、HEAD、POST、PUT、DELETE、TRACE 或 OPTIONS stringboundary = Guid.NewGuid().ToString(); // 随机分隔线 //设置数据类型为multipart/form-data,多部分/数据表单类型,该类型用于传递文件数据的情形,当然也可以传递文本参数 request.ContentType = "multipart/form-data;charset=utf-8;boundary="+ boundary; //构建数据,无论文本数据还是文件数据,最终都要以字节流的形式进行发送 //构建数据:word文档文件 // "--" + boundary表示一条数据的开头 //第一个"\r\n"表示开始分隔符和数据声明之间的分隔符,二者之间有且只能有1个换行符,如果没有或者超过1个,都将导致数据解析失败 //Content-Disposition:form-data;name=\"sInputF\";filename=\"{Path.GetFileName(mDocPath)}\"表示一条数据声明 //Content-Disposition:form-data表示数据的处置方式为表单数据 //name=\"sInputF\"表示该参数名称、字段名、键 //filename=\"{Path.GetFileName(mDocPath)}\"上传文件,指明文件名称 //第二个\r\n表示第一条数据声明和第二条数据声明之间的分隔符,二者之间有且只能有1个换行符,如果没有或者超过1个,都将导致数据解析失败 //Content - Type:application / octet - stream表示数据类型为字节流 //最后的\r\n\r\n表示数据声明和数据内容之间的分隔符,二者只有至少有2个换行符,如果换行符超过2个,可以正常解析,如果少于2个,将导致数据解析失败 stringdocStr = "--"+ boundary + "\r\n"+ $"Content-Disposition:form-data;name=\"sInputF\";filename=\"{Path.GetFileName(mDocPath)}\"\r\nContent-Type:application/octet-stream\r\n\r\n\r\n\r\n\r\n"; byte[] docFileBytes = ReadFileBytes(mDocPath);//从文件中读取字节数据 //构建数据:图片文件 stringsealStr = "--"+ boundary + "\r\n"+ $"Content-Disposition:form-data;name=\"sSealF\";filename=\"{Path.GetFileName(mSealPath)}\"\r\nContent-Type:application/octet-stream\r\n\r\n"; byte[] sealFileBytes = ReadFileBytes(mSealPath);//从文件中读取字节数据 //构建数据:普通文本参数 //每一条数据都已条目分隔符开始,然后后面按照格式拼接相关数据 //Content-Type: text/plain; charset=utf-8表示内容的格式是普通文本,编码格式为charset=utf-8 //Content-Disposition:form-data表示数据处理方式,作为表单数据进行处理 //name表示参数名、字段名、或者键 //第一个"\r\n",表示开始分隔符和数据声明之间的分隔符,二者之间有且只能有1个换行符,如果没有或者超过1个,都将导致数据解析失败 //第二个\r\n表示第一条数据声明和第二条数据声明之间的分隔符,二者之间有且只能有1个换行符,如果没有或者超过1个,都将导致数据解析失败 //最\r\n\r\n表示数据声明和数据内容之间的分隔符,二者只有至少有2个换行符,如果换行符超过2个,可以正常解析,如果少于2个,将导致数据解析失败 //最后的\r\n表示本条数据内容和下一条数据之间,至少有1个换行符,如果超过1个,可以正常解析,如果没有该换行符,将导致数据解析失败 stringpageStr = "--"+ boundary + "\r\n"+ $"Content-Type:text/plain;charset=utf-8\r\nContent-Disposition:form-data;name=\"sPageNum\"\r\n\r\n\r\n\r\n\r\n{1}\r\n\r\n\r\n\r\n\r\n\r\n"; stringwStr = "--"+ boundary + "\r\n"+ $"Content-Type:text/plain;charset=utf-8\r\nContent-Disposition:form-data;name=\"fSealW\"\r\n\r\n{1}\r\n"; stringhStr = "--"+ boundary + "\r\n"+ $"Content-Type:text/plain;charset=utf-8\r\nContent-Disposition:form-data;name=\"fSealH\"\r\n\r\n{1}\r\n"; stringxStr = "--"+ boundary + "\r\n"+ $"Content-Type:text/plain;charset=utf-8\r\nContent-Disposition:form-data;name=\"fSealPosX\"\r\n\r\n{1}\r\n"; stringyStr = "--"+ boundary + "\r\n"+ $"Content-Type:text/plain;charset=utf-8\r\nContent-Disposition:form-data;name=\"fSealPosY\"\r\n\r\n{1}\r\n"; //将所有数据转换为字节数组,并合并在一起 List //第一个文件 byteList.AddRange(Encoding.UTF8.GetBytes(docStr));//添加文件数据头 byteList.AddRange(docFileBytes);//添加文件数据 byteList.AddRange(Encoding.UTF8.GetBytes("\r\n"));//本条数据内容和下一条数据之间,至少有1个换行符,如果没有该换行符,将导致数据解析失败 //第二个文件 byteList.AddRange(Encoding.UTF8.GetBytes(sealStr));//添加文件数据头 byteList.AddRange(sealFileBytes);//添加文件数据 byteList.AddRange(Encoding.UTF8.GetBytes("\r\n"));//本条数据内容和下一条数据之间,至少有1个换行符,如果没有该换行符,将导致数据解析失败 //所有的文本参数 byteList.AddRange(Encoding.UTF8.GetBytes(pageStr));//添加文本参数数据 byteList.AddRange(Encoding.UTF8.GetBytes(wStr));//添加文本参数数据 byteList.AddRange(Encoding.UTF8.GetBytes(hStr));//添加文本参数数据 byteList.AddRange(Encoding.UTF8.GetBytes(xStr));//添加文本参数数据 byteList.AddRange(Encoding.UTF8.GetBytes(yStr));//添加文本参数数据 //所有数据的最后,要添加结尾分隔符 byteList.AddRange(Encoding.UTF8.GetBytes("--"+ boundary + "--")); //设置写入数据的长度,并将数据写入 request.ContentLength = byteList.Count;//设置数据长度,byte为单位 Stream postStream = request.GetRequestStream();//获取HttpWebRequest的数据流对象 postStream.Write(byteList.ToArray(), 0, byteList.Count);//将数据写入,开始位置为0,写入数量为byteList.Count postStream.Close();//写完后,关闭流对象 WebResponse response = request.GetResponse();//发送请求 获取回应 //获取回应的文本内容 Stream stream = response.GetResponseStream();//获取响应的流 StreamReader reader = newStreamReader(stream); stringcontent = reader.ReadToEnd();//读取响应流 reader.Close();//关闭流 //构建打印信息 stringshowStr = docStr + mDocPath + "\n文件字节数="+ docFileBytes.Length + "\n"+ sealStr + mSealPath + "\n文件字节数="+ sealFileBytes.Length + "\n"+ pageStr + wStr + hStr + xStr + yStr + "\r\n"+ "--"+ boundary + "--"; //显示相关信息 richTextBox1.Text = "返回信息:\n"+ content + "\n\n请求头信息:\n"+ request.Headers.ToString() + "发送的数据:\n"+ showStr; } |
源码2
voidRequest2() { //创建request对象,不能通过构造函数创建 HttpWebRequest request = WebRequest.CreateHttp(mPostUrl); //设置请求方法 GET、HEAD、POST、PUT、DELETE、TRACE 或 OPTIONS request.Method = "POST"; //获取随机分隔符 stringboundary = Guid.NewGuid().ToString(); //设置内容格式 request.ContentType = "multipart/form-data;charset=utf-8;boundary="+ boundary; //通过参数字典,获取所有字节数据 List //设置内容长度 request.ContentLength = byteList.Count; //获取请求的流对象 并写入字节数据 Stream postStream = request.GetRequestStream(); postStream.Write(byteList.ToArray(), 0, byteList.Count); postStream.Close(); //获取响应 WebResponse response = request.GetResponse();//发送请求 获取回应 //获取回应的文本内容 Stream stream = response.GetResponseStream(); StreamReader reader = newStreamReader(stream); stringcontent = reader.ReadToEnd(); reader.Close(); //显示相关信息 richTextBox1.Text = "返回信息:\n"+ content; } //普通参数 Dictionary { { "sPageNum","1"}, { "fSealW","100"}, { "fSealH","100"}, { "fSealPosX","100"}, { "fSealPosY","100"}, }; //文件参数 Dictionary { { "sInputF",mDocPath}, { "sSealF",mSealPath}, }; //获取文件参数的字节数据 List { List stringhead = "--"+ boundary + "\r\n"+ $"Content-Disposition:form-data;name=\"{field}\";filename=\"{Path.GetFileName(path)}\"\r\nContent-Type:application/octet-stream\r\n\r\n"; res.AddRange(Encoding.UTF8.GetBytes(head)); res.AddRange(ReadFileBytes(path)); res.AddRange(Encoding.UTF8.GetBytes("\r\n")); returnres; } //获取普通参数的字节数据 List { List stringhead = "--"+ boundary + "\r\n"+ $"Content-Type:text/plain;charset=utf-8\r\nContent-Disposition:form-data;name=\"{field}\"\r\n\r\n{value}\r\n"; res.AddRange(Encoding.UTF8.GetBytes(head)); returnres; } //获取所有字节数据 List { List foreach(var item infileDic) { List res.AddRange(temp); } foreach(var item inparamDic) { List res.AddRange(temp); } res.AddRange(Encoding.UTF8.GetBytes("\r\n--"+ boundary + "--\r\n")); returnres; } //读取文件中的所有字节 byte[] ReadFileBytes(stringpath) { if(!File.Exists(path)) returnnewbyte[0]; FileStream fs = newFileStream(path, FileMode.Open, FileAccess.Read); intiLenStream = (int)fs.Length; byte[] bArr = newbyte[fs.Length]; fs.Read(bArr, 0, bArr.Length); fs.Close(); returnbArr; } |
-
当前速读:post表单数据格式完全解析multipart/form-data(C#实现)
post表单数据格式完全解析multipart form-data参数说明内容boundaryboundary一个字符串,用以分隔不同...
来源: 当前速读:post表单数据格式完全解析multipart/form-data(C#实现)
队列之王: Disruptor 原理、架构、源码 一文穿透
每日视讯:Python如何导入自定义模块?
环球通讯!进制转换和计算机存储规则
SpringBoot整合Swagger2在线文档
迷惑!大妈凌晨骑车撞上路边停放车辆:怒斥司机不开车灯
黄桃罐头遭疯抢 厂家实诚回应“没药效” 网友调侃:你不懂
环球观焦点:曝Redmi K60系列依然将采用塑料支架 为了性价比?
注意!鲍鱼被列入濒危物种红色名录:20种或灭绝
10.3寸墨水屏!联想YOGA Paper墨水平板今日开售 3699元
天天热点评!环形队列、 条带环形队列 Striped-RingBuffer (史上最全)
梅西进4强 雷军点赞:阿根廷门将神了 太给力
全球微速讯:苹果要大赚!消息称iPhone 15又涨价 高端万元起:华为Mate60等跟涨吗
天天快资讯:深度学习基础课:最大池化层的前向传播推导
阿根廷点球大战淘汰荷兰:梅西点射破门 追平巴蒂纪录网友纷祝贺
国际领先!中国天眼获得银河系气体高清图像:揭露恒星诞生到消亡
世界热讯:巴西点球大战3-5克罗地亚!无缘四强 内马尔赛后痛哭
今日播报!Python装饰器与迭代器的学习教程
全球快资讯:你必须记住的30个CSS选择器?
最轻折叠屏OPPO Find N2来了!朱海舟:上手后你会WOW一下
当前热点-负债585.68亿、工资发不出:国美获黄光裕公司贷款1.5亿港元
天天快讯:NVIDIA力推的光追版《传送门》游戏被指代码糟糕:AMD显卡坑了
零百加速3.8秒马力暴躁 蔚来全系车型试驾会郑州站开启
世界短讯!MAUI新生5.2-样式外观:控件状态样式VisualState
python实现简单的商品数据管理系统
全球动态:asp.net core 基于Cookies的认证,自定义认证方案
全球新消息丨nginx中的正则表达式,location路径匹配规则和优先级
当前观点:后矿难时代 显卡价格仍居高不下
环球通讯!Java校验自定义枚举值
全球观天下!第一百一十一篇:基本引用类型Date
天天快消息!布洛芬不用抢 中国产能全球第一:一家公司就够33亿人用
天天短讯!BLOG-3总结
世界即时:突发!特斯拉中国工厂将停产Model Y
世界速看:一箱油能跑1200公里!比亚迪护卫舰07上市 20.28万起
当前通讯!雷军再谈小米13徕卡影像:非常自豪 你一定会被震撼到
【天天时快讯】我 一个程序员 靠玩ChatGPT年薪210万
世界看点:DX9性能大涨80% Intel驱动打鸡血原因找到了:做法很聪明
关注:南京一外卖小哥逆行撞劳斯莱斯 网友:几十年外卖白送了
今日快看!全球首架C919正式交付 中国搞这款大飞机有多不容易?
AI画作拍出110万高价创纪录!实测百度AI作画 效果惊艳
主人吃螺蛳粉:猫咪被臭到自闭
世界观速讯丨19岁少女无法走路 竟是因为它?国家早已明令禁止!
rsync远程同步
世界观焦点:AMD RX 7900 XTX渲染跑分性能曝光:感觉和RTX 4080两个时代
【热闻】国内电影票房已达285亿 《阿凡达2》成救命稻草:高价被指吃相难看
世界热推荐:为什么日本人更健康长寿?这12个“秘诀”值得借鉴
小米13 Pro长焦表现一绝:10cm至无穷远均可合焦
【报资讯】网传辽宁一有轨电车碾压电动自行车 官方回应:系剐蹭、人无碍
netmiko+textfsm自动统计交换机端口模块型号数量与闲置模块
【全球独家】【网关开发】4.Openresty 使用events插件进行事件通知
世界新消息丨蒟蒻颤抖:AI打信奥赛,三分之二赛题一遍过
【求助帖】从技术转为项目经理后,如何快速进入角色?
angr_ctf——从0学习angr(四):库操作和溢出漏洞利用
【世界速看料】新一代广汽本田皓影官图发布:大嘴变方嘴、可选7座
《原神》获TGA“玩家之声”奖!官方发800原石:全体都有
世界新动态:一部车骑10年!绿源推出INNO9-lite电动自行车:新国标 80km续航
天天快消息!NVIDIA发布527.56显卡驱动程序:DLSS 3游戏性能更强了
天天最资讯丨站起来了!哈弗H6插电混动版11月销量首超4000:直逼问界M5
焦点速递!CSS绝对定位7大应用场景实战案例分享
教你用CSS实现表单部件
环球热议:物联网平台在AIoT领域8大场景应用
东航官宣全球第一架C919商业首飞时间!这7大城市有福了
打爆丰田、本田混动SUV 比亚迪护卫舰07上市:20.28万起
天天微资讯!换代!AMD锐龙9 7950X3D来了:游戏性能比酷睿i9-13900K高出33%
【速看料】全国5G网络接入速率出炉:北京、上海都没抢到第一 移动最快
【世界新要闻】上线7年无敌手!《王者荣耀》11月吸金超13亿元:蝉联销冠
观点:MYSQL 1 DAY
世界微速讯:智能PDU,网络远程管理电源能耗提升配电效率
当前滚动:“云办公”如何用任务协同工具搞定项目和团队管理?
今日聚焦!SSM整合(spring-springmvc-mybatis)之CRUD
焦点日报:又拓新业务 比亚迪全新皮卡谍照曝光:DM混动没跑了
热点!不掉绒、无静电!史努比牛奶绒床品四件套大促:券后99元
天天快讯:一箭十四星 捷龙三号运载火箭首飞发射成功:海陆两用
焦点快播:QQ等级全球第一咋做到的?本人回应让网友羡慕:小时候家里开网吧
官方“挖墙脚”?网易《逆水寒》宣布推出“网易魔兽老兵服”
资讯:vscode使用chatGPT
全球滚动:我与 ChatGPT 讨论了面向对象语言 中,关于动态调用的问题
快播:第三方登录组件-JustAuth
【环球报资讯】BI智慧仓储,带你体验数字化仓储物流管理
环球今亮点!把ipa文件上传到App Store教程步骤
每日热讯!易基因:简化甲基化测序(RRBS)在植物生态表观基因组学中的机遇和局限|深度综述
当前聚焦:记.net framework php接口 返回数据格式问题 请求接口远程服务器返回错误: (500) 内部服务器错误
ChatGPT 大白话 SmartIDE
Zabbix与乐维监控对比分析(三)——对象管理篇
全球报道:专访|开源之夏最佳质量奖 Apache RocketMQ Committer 黄章衡
世界热消息:.net6制作让同事不能上网的arp欺骗工具
每日热门:如何利用 A/B 实验提升产品用户留存? 看字节实战案例给你答案!
chatGPT辣么火,你却不会注册
每日速讯:2022最新上传ipa到appstore的步骤说明
怎么在电脑上查看iPhone定位?iphone定位不准怎么校正?
怎么验证windows是不是正版?验证windows正版的方法有哪些?
光大银行信用卡额度一般是多少?光大银行信用卡怎么查询进度?
银行卡号泄露有危险吗?银行卡号泄露挂失有用吗?
空调怎么省电?空调省电的正确用法有哪些?
word文档怎么做思维导图?word文档怎么做小抄?
宏碁4750g怎么进入bios?宏碁4750G需要哪些驱动?
电视机顶盒怎么破解?电视机顶盒哪个牌子好用?
诺基亚710上市价格是多少?诺基亚710手机现在能用吗?
天然气热值是多少大卡?天然气热值换算表
环球热议:行为管理(锐捷业务软件篇)