高手看过来,如何用webrequest提交multipart/form-data类型的表格。(急!急!急!分不够自己说)

yk2001 2004-11-18 11:32:03
有一个multipart/form-data的form
我用下面的方式构造出的RequestStream是application/x-www-form-urlencoded类型,如何才能构造正确的multipart/form-data类型的RequestStream?

通过拦截socket发现multipart/form-data的提交是通过两次send实现的,一次send头,一次send参数这又如何做到的?webrequest可以自动实现么?

觉得分不够的可以在
http://community.csdn.net/Expert/topic/3562/3562119.xml?temp=.4532587
跟贴,还不够可以开贴

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HttpWebRequest req = (HttpWebRequest)
WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "multipart/form-data";

StringBuilder UrlEncoded = new StringBuilder();
Char[] reserved = {'?', '=', '&'};
byte[] SomeBytes = null;

if (paramList != null)
{
int i=0, j;
while(i<paramList.Length)
{
j=paramList.IndexOfAny(reserved, i);
if (j==-1)
{
UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
break;
}
UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
UrlEncoded.Append(paramList.Substring(j,1));
i = j+1;
}
SomeBytes = Encoding.GetEncoding("gb2312").GetBytes(UrlEncoded.ToString());
req.ContentLength = SomeBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length);
newStream.Close();
}
else
{
req.ContentLength = 0;
}

构造
...全文
484 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yk2001 2004-11-21
  • 打赏
  • 举报
回复
上面程序有点小问题,看明白的自己改改吧,谢谢支持
hawk234 2004-11-20
  • 打赏
  • 举报
回复
up
yk2001 2004-11-20
  • 打赏
  • 举报
回复
谢谢大家,我自己把帖子回了算了。
参数部分大概是这样做的,最后一个是一个文件上传类型的参数,可以输入filename所以单独处理了。这个方法是拦截了IE发出的包后照猫画虎做出来的,用google搜了一下,解决方案差不多。不过现在还没有解决cookie的输入问题,所以没有办法试验,欢迎大家砸砖。
另外打算明天结贴,在本贴帮顶的和在下面这个帖子跟贴的都有分拿,谢谢大家。
http://community.csdn.net/Expert/topic/3562/3562119.xml?temp=.4532587



StringBuilder UrlEncoded = new StringBuilder();
Char[] reserved1 = { '&'};
Char[] reserved2 = { '='};
byte[] SomeBytes = null;

string substr;
string ucode;
bool isName = true;

if (paramList != null)
{
int i=0, j, k;
while(i<paramList.Length)
{
j = paramList.IndexOfAny(reserved2, i); // =
k = paramList.IndexOfAny(reserved1, i); // &

if (-1==k) // 找到了最后一个
{
UrlEncoded.Append("--");
UrlEncoded.Append(boundary);
UrlEncoded.Append("\r\n");
UrlEncoded.Append("Content-Disposition: form-data; name=\"");
UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i),Encoding.GetEncoding("gb2312")));
UrlEncoded.Append(paramList.Substring(j,1));
UrlEncoded.Append("\";filename=\"\"\r\n");
UrlEncoded.Append("Content-Type: application/octet-stream");
UrlEncoded.Append("\r\n\r\n\r\n");
UrlEncoded.Append("--");
UrlEncoded.Append(boundary);
UrlEncoded.Append("--");
UrlEncoded.Append("\r\n");

break;
}

UrlEncoded.Append("--");
UrlEncoded.Append(boundary);
UrlEncoded.Append("\r\n");
UrlEncoded.Append("Content-Disposition: form-data; name=\"");
UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i-1),Encoding.GetEncoding("gb2312")));
UrlEncoded.Append(paramList.Substring(j,1));
UrlEncoded.Append("\"\r\n\r\n");
i = j+1;
UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, k-i),Encoding.GetEncoding("gb2312")));
UrlEncoded.Append("\r\n");
i = k+1;
}
substr = UrlEncoded.ToString();

SomeBytes = Encoding.GetEncoding("gb2312").GetBytes(UrlEncoded.ToString());
req.ContentLength = SomeBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length);
newStream.Close();
xiaoslong 2004-11-18
  • 打赏
  • 举报
回复
帮你顶一下
cxyPioneer 2004-11-18
  • 打赏
  • 举报
回复
关注
haoztao 2004-11-18
  • 打赏
  • 举报
回复
这方面不是很熟悉,帮你顶!
jxzhang615 2004-11-18
  • 打赏
  • 举报
回复
关注!学习!!
yyh21m 2004-11-18
  • 打赏
  • 举报
回复
帮顶,拿分,谢
内容概要:本文针对孤岛微电网在运行中面临的功率分配不均、电压频率波动等问题,提出了一种基于多智能体一致性演化的自适应虚拟阻抗容错控制与二次稳态补偿机制,并通过Simulink平台进行仿真实现。研究采用多智能体系统(MAS)框架,将各分布式电源建模为具备局部信息交互能力的智能体,利用一致性算法实现全局协同控制;结合自适应虚拟阻抗技术动态调节等效输出阻抗,有效克服线路阻抗差异导致的有功与无功功率耦合问题,提升功率均分精度;同时设计二次控制补偿环节,消除一次下垂控制引入的静态偏差,恢复电压和频率至额定水平。该机制具备良好的容错能力,在部分节点发生故障或通信中断时可自动重构控制结构,维持系统稳定运行,适用于高可靠性和自治性要求的孤岛微电网场景。; 适合人群:具备电力系统、自动化或电气工程等相关专业背景,熟悉微电网控制、多智能体系统理论及现代控制方法的研究生、科研人员及工程技术人员。; 使用场景及目标:①为孤岛微电网提供高精度、强鲁棒性的分布式协同控制解决方案;②解决传统下垂控制中存在的功率分配不准与电能质量下降问题;③实现系统在故障扰动下的自主容错与快速恢复,提升微电网的自愈能力与运行可靠性。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制策略的实现细节,重点关注多智能体通信拓扑构建、一致性协议设计、虚拟阻抗自适应律以及二次补偿控制器的参数整定方法,同时可通过修改故障场景和通信条件进行对比实验,全面掌握该机制的动态响应特性与适应范围。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧