高手看过来,如何用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;
}

构造
...全文
425 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
  • 打赏
  • 举报
回复
帮顶,拿分,谢

110,571

社区成员

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

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

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