我们暂且不说如何去模拟数据,通过一个简单的form看看当请求发生时,客户端提交了什么样的数据给服务端。
下面是一个简单的html form,两个文本输入框,一个文件上传(这里我选择一张图片),注意有文件上传的form的enctype属性。
复制代码 代码如下:
<form action="sql.aspx" method="post" enctype="multipart/form-data">
<input id="Text1" name="content" type="text" /><br />
<input id="Text2" name="uploadImg" type="text" /><br />
<input id="File1" type="file" name="image0" /><br />
<input id="Submit1" type="submit" value="submit" />
</form>
为了查看表单提交时,向服务端post了什么数据,这里我使用Fiddler来查看。Fiddler确实是个不错的工具,注意当url主机地址是localhost时Fiddler捕获不到,需要再localhost后加一点(.)即可,打开Fiddler,浏览带上面form的page,输入数据提交,此时在Fiddler中可看到post的数据了。下面是一部份数据的截图。
分析其中的数据不难得出,一个表单中的数据域(input type="text")对应的格式为
-----------------------------7da119c1004a6
Content-Disposition: form-data; name="content"
this is a txt value
一个文件(input type="file")对应的格式为(通常为表单最后一个参数)
-----------------------------7da119c1004a6
Content-Disposition: form-data; name="image0"; filename="E:\CAI\875.jpg"
Content-Type: image/pjpeg
[文件内容]
结尾处是-----------------------------7da119c1004a6--
有了上面的数据做参考,按照其格式组织数据,post到服务端,同样可以达到html form提交的效果。要特别注意其格式:如回车换行,差一个都可能得不到正确的响应,还有请求的Content-Length一定计算对。下面是一个参考:
代码
复制代码 代码如下:
public string POSTfile(string v1,string v2, string file)
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
//请求
WebRequest req = WebRequest.Create(@"http://localhost.:4944/WebSite1/getfile.aspx");
req.Method = "POST";
req.ContentType = "multipart/form-data; boundary=" + boundary;
//组织表单数据
StringBuilder sb = new StringBuilder();
sb.Append("--" + boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"content\"");
sb.Append("\r\n\r\n");
sb.Append(v1);
sb.Append("\r\n");
sb.Append("--" + boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"uploadImg\"");
sb.Append("\r\n\r\n");
sb.Append("v2");
sb.Append("\r\n");
sb.Append("--" + boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"image0\"; filename=\"e:\\a.jpg\"");
sb.Append("\r\n");
sb.Append("Content-Type: image/pjpeg");
sb.Append("\r\n\r\n");
string head = sb.ToString();
byte[] form_data = Encoding.UTF8.GetBytes(head);
//结尾
byte[] foot_data = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
//文件
FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
//post总长度
long length = form_data.Length + fileStream.Length + foot_data.Length;
req.ContentLength = length;
Stream requestStream = req.GetRequestStream();
//发送表单参数
requestStream.Write(form_data, 0, form_data.Length);
//文件内容
byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead);
//结尾
requestStream.Write(foot_data, 0, foot_data.Length);
requestStream.Close();
//响应
WebResponse pos = req.GetResponse();
StreamReader sr = new StreamReader(pos.GetResponseStream(), Encoding.UTF8);
string html = sr.ReadToEnd().Trim();
sr.Close();
if (pos != null)
{
pos.Close();
pos = null;
}
if (req != null)
{
req = null;
}
return html;
}
相关推荐:
域名行业再起波澜 COM降价引发代理狂潮
javascript(jquery)利用函数修改全局变量的代码
浅谈PHP 闭包特性在实际应用中的问题
MSSQL2005 INSERT,UPDATE,DELETE 之OUTPUT子句使用实例
sqlserver 中ntext字段的批量替换(updatetext的用法)
asp.net 用继承方法实现页面判断session
巧用DOS 伪装保护文件完整版
JavaScript 点击插入文字
vbs 搜索代理地址实现代码[小偷程序]
图片友情链接滚动 横向,带控制按钮
AJAX 自学练习 请求与显示
Oracle 子程序参数模式,IN,OUT,NOCOPY
支持ie与FireFox的剪切板操作代码
PHP 程序员应该使用的10个组件
基于JQuery框架的AJAX实例代码
php pack与unpack 摸板字符字符含义
javascript DOM编程实例(智播客学习)
php面向对象全攻略 (十) final static const关键字的使用
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
在IE下获取object(ActiveX)的Param的代码
asp 实现的冒泡排序程序
SQLServer2005中的SQLCMD工具使用
PHP 批量删除数据的方法分析
phpsir 开发 一个检测百度关键字网站排名的python 程序
学习ExtJS accordion布局
oracle 在一个存储过程中调用另一个返回游标的存储过程
IIS 性能优化 服务器
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
asp 通用修改和增加函数代码
php 数学运算验证码实现代码
Apache下禁止特定目录执行PHP 提高服务器安全性
php面向对象全攻略 (十五) 多态的应用
xampp apache启动失效问题的解决方法
javascript parseInt 大改造
jquery checkbox全选反选效果代码
asp.net FreeTextBox配置详解
div+CSS 兼容小摘
The remote procedure call failed and did not execute的解决办法
Javascript 模式实例 观察者模式
asp.net 验证码生成和刷新及验证
JSP request(return String)用法详例
php 魔术方法使用说明
兼容多浏览器的JS 浮动广告[推荐]
JavaScript 对象成员的可见性说明
服务器安全策略 IP安全策略设置方法
DIV+CSS+JS 变灰弹出层
JavaScript 图片放大效果及代码说明
asp.net 读取并修改config文件实现代码
Asp.net利用JQuery弹出层加载数据代码
jquery text()要注意啦