httpwatch获得出来的参数-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="__VIEWSTATE"/wEPDwULLTEwMDQ2MjQ4MjcPZBYCAgMPFgIeB2VuY3R5cGUFE211bHRpcGFydC9mb3JtLWRhdGFkZA==
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="__EVENTVALIDATION"/wEWBQKp6aXABQL4kuGeCALt3oXMAwLm3PTRCALY4+lr
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="fuLoad"; filename="D:\eclipse3.1\eclipse3.1\workspace2\bjrjbrWeb\WebRoot\admin\upload\userUploadImage\1245723790453esf1.jpg"
Content-Type: image/pjpeg?
Content-Disposition: form-data; name="upfile"鐐瑰嚮涓婁紶鍥剧墖鎸夐挳锛屼笂浼犲浘鐗?
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="btnUpload"涓婁紶
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="hidShiNei"
-----------------------------7db4e2920b3e--只上传图片已经上传成功了,现在这个里面又添加了参数VIEWSTATE,EVENTVALIDATION,upfile等
发送图片也是在网上找的
String contenttype = "image/jpeg";
string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
try
{
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uploadUrl);
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST";
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append(fileFormName);
sb.Append("\"; filename=\"");
sb.Append(Path.GetFileName(fileToUpload));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(contenttype);
sb.Append("\r\n");
sb.Append("\r\n"); //string postHeader = sb.ToString() + postDateAdd;
//string postData = "";
//if (postDateAdd != "")
//{
// StringBuilder post = new StringBuilder();
// string[] array = postDateAdd.Split('&');
// foreach (string str in array)
// {
// string[] arr = str.Split('=');
// post.AppendFormat("{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}\r\n", boundary, arr[0], arr[1]);
// }
// post.AppendFormat("{0}--\r\n", boundary);
// postData = post.ToString();
// } string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); //byte[] postDateAddBytes = encoding.GetBytes(postData); byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(fileToUpload, FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length + postDateAddBytes.Length;
webrequest.ContentLength = length;
webrequest.CookieContainer = cc;
webrequest.AllowAutoRedirect = true; webrequest.ServicePoint.ConnectionLimit = maxTry;
webrequest.Referer = uploadUrl;
webrequest.Accept = accept;
webrequest.UserAgent = userAgent; Stream requestStream = webrequest.GetRequestStream(); //requestStream.Write(postDateAddBytes, 0, postDateAddBytes.Length); requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); byte[] buffer = new Byte[(int)fileStream.Length];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse(); StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
string html = sr.ReadToEnd();
requestStream.Close();
return html;想知道VIEWSTATE,EVENTVALIDATION,upfile这些参数是怎么传上去的?
Content-Disposition: form-data; name="__VIEWSTATE"/wEPDwULLTEwMDQ2MjQ4MjcPZBYCAgMPFgIeB2VuY3R5cGUFE211bHRpcGFydC9mb3JtLWRhdGFkZA==
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="__EVENTVALIDATION"/wEWBQKp6aXABQL4kuGeCALt3oXMAwLm3PTRCALY4+lr
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="fuLoad"; filename="D:\eclipse3.1\eclipse3.1\workspace2\bjrjbrWeb\WebRoot\admin\upload\userUploadImage\1245723790453esf1.jpg"
Content-Type: image/pjpeg?
Content-Disposition: form-data; name="upfile"鐐瑰嚮涓婁紶鍥剧墖鎸夐挳锛屼笂浼犲浘鐗?
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="btnUpload"涓婁紶
-----------------------------7db4e2920b3e
Content-Disposition: form-data; name="hidShiNei"
-----------------------------7db4e2920b3e--只上传图片已经上传成功了,现在这个里面又添加了参数VIEWSTATE,EVENTVALIDATION,upfile等
发送图片也是在网上找的
String contenttype = "image/jpeg";
string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
try
{
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uploadUrl);
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST";
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append(fileFormName);
sb.Append("\"; filename=\"");
sb.Append(Path.GetFileName(fileToUpload));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(contenttype);
sb.Append("\r\n");
sb.Append("\r\n"); //string postHeader = sb.ToString() + postDateAdd;
//string postData = "";
//if (postDateAdd != "")
//{
// StringBuilder post = new StringBuilder();
// string[] array = postDateAdd.Split('&');
// foreach (string str in array)
// {
// string[] arr = str.Split('=');
// post.AppendFormat("{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}\r\n", boundary, arr[0], arr[1]);
// }
// post.AppendFormat("{0}--\r\n", boundary);
// postData = post.ToString();
// } string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); //byte[] postDateAddBytes = encoding.GetBytes(postData); byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(fileToUpload, FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length + postDateAddBytes.Length;
webrequest.ContentLength = length;
webrequest.CookieContainer = cc;
webrequest.AllowAutoRedirect = true; webrequest.ServicePoint.ConnectionLimit = maxTry;
webrequest.Referer = uploadUrl;
webrequest.Accept = accept;
webrequest.UserAgent = userAgent; Stream requestStream = webrequest.GetRequestStream(); //requestStream.Write(postDateAddBytes, 0, postDateAddBytes.Length); requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); byte[] buffer = new Byte[(int)fileStream.Length];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse(); StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
string html = sr.ReadToEnd();
requestStream.Close();
return html;想知道VIEWSTATE,EVENTVALIDATION,upfile这些参数是怎么传上去的?
string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
try
{
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uploadUrl);
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST";
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append(fileFormName);
sb.Append("\"; filename=\"");
sb.Append(Path.GetFileName(fileToUpload));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(contenttype);
sb.Append("\r\n");
sb.Append("\r\n"); //string postHeader = sb.ToString() + postDateAdd;
string postData = "";
if (postDateAdd != "")
{
StringBuilder post = new StringBuilder();
string[] array = postDateAdd.Split('&');
foreach (string str in array)
{
string[] arr = str.Split('=');
post.AppendFormat("{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}\r\n", boundary, arr[0], arr[1]);
}
post.AppendFormat("{0}--\r\n", boundary);
postData = post.ToString();
} string postHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); byte[] postDateAddBytes = Encoding.ASCII.GetBytes(postData); //byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
FileStream fileStream = new FileStream(fileToUpload, FileMode.Open, FileAccess.Read);
//long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length + postDateAddBytes.Length;
long length = postHeaderBytes.Length + fileStream.Length + postDateAddBytes.Length;
webrequest.ContentLength = length;
webrequest.CookieContainer = cc;
webrequest.AllowAutoRedirect = true; webrequest.ServicePoint.ConnectionLimit = maxTry;
webrequest.Referer = uploadUrl;
webrequest.Accept = accept;
webrequest.UserAgent = userAgent; Stream requestStream = webrequest.GetRequestStream(); requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); byte[] buffer = new Byte[(int)fileStream.Length];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead); //requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); requestStream.Write(postDateAddBytes, 0, postDateAddBytes.Length); HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse(); StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
string html = sr.ReadToEnd();
requestStream.Close();
return html;
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); byte[] buffer = new Byte[(int)fileStream.Length];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead);requestStream.Write(postDateAddBytes, 0, postDateAddBytes.Length);发送剩下的字段可以这样写吗?我调试获得出来的,跟截取的一样的,可是就是上传不上去
string[] values = new string[] { bt, ct, p.formhash};//, p.typeid, "on", "1", "预览帖子" };
//发送每个字段
sb.Length = 0;
for (int j = 0; j < props.Length; j++)
{
sb.Append("--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + props[j] + "\"\r\n\r\n" + values[j] + "\r\n");
}
sb.Append("--" + boundary + "--\r\n");
byteArray = Encoding.Default.GetBytes(sb.ToString());
dl.Add(byteArray);
byteArray = null;
sb = null; MemoryStream mss = new MemoryStream();
for (int j = 0; j < dl.Count; ++j)
{
mss.Write(dl[j], 0, dl[j].Length);
}
dl.Clear();
byteArray = mss.ToArray();
mss.Close();
private bool AddPicture(byte[] fileDate)
{
if (fileDate == null) return false;
if (xh < 20)
{
++xh; StringBuilder sb = new StringBuilder();
sb.Append("--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"attach[]\"; filename=\"" + xh + ".jpg\"\r\n");
sb.Append("Content-Type: image/*\r\n\r\n");
byte[] byteArray = Encoding.Default.GetBytes(sb.ToString());
dl.Add(byteArray);
dl.Add(fileDate);
sb.Length = 0;
sb.Append("\r\n");
sb.Append("--" + boundary + "\r\nContent-Disposition: form-data; name=\"localid[]\"\r\n\r\n" + xh + "\r\n");
sb.Append("--" + boundary + "\r\nContent-Disposition: form-data; name=\"attachperm[]\"\r\n\r\n0\r\n");
sb.Append("--" + boundary + "\r\nContent-Disposition: form-data; name=\"attachprice[]\"\r\n\r\n0\r\n");
sb.Append("--" + boundary + "\r\nContent-Disposition: form-data; name=\"attachdesc[]\"\r\n\r\n\r\n");
byteArray = Encoding.Default.GetBytes(sb.ToString());
dl.Add(byteArray);
return true;
}
else
{
if (textPics == null) textPics = new Queue<byte[]>();
textPics.Enqueue(fileDate);
return true;
}
} private bool AddPicture(List<byte[]> DateList)
{
if (DateList == null) return false;
foreach (byte[] fileDate in DateList)
{
AddPicture(fileDate);
}
return true;
}
Stream requestStream = webrequest.GetRequestStream();
requestStream.Write(buffer, 0, bytesRead);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
requestStream.Write(postDateAddBytes, 0, postDateAddBytes.Length);我想知道可以把那些参数跟图片在一块儿,一个stream里面全都写进去吗?
上传文件的操作界面
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>姓名</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="ff.asp">
<p>姓名:<input type="text" name="xm" size="20"></p>
<p>简历:<textarea rows="2" name="jl" cols="20"></textarea></p>
<p>已婚:<input type="checkbox" name="hy" value="Yes" checked></p>
<p>性别:<input type="radio" value="nan" checked name="sex">男
<input type="radio" name="sex" value="nv">女</p>
<p>文件1:<input type="file" name="File1" size="30"></p>
<p>文件2:<input type="file" name="File2" size="30"></p>
<p><input type="submit" value="提交" name="B1"><input type="reset" value="重置" name="B2"></p>
</form>
</body>
</html>提交表单时的处理程序 ff.asp
<%
Function bin2str(binstr)
Dim oUpFileStream
Set oUpFileStream = Server.CreateObject("ADODB.Stream")
oUpFileStream.Type = 1 '二进制格式
oUpFileStream.Open
oUpFileStream.Write binstr
oUpFileStream.Position=0
oUpFileStream.Type = 2 '文本格式
oUpFileStream.CharSet = "GB2312"
bin2str=oUpFileStream.ReadText
oUpFileStream.close
Set oUpFileStream = nothing
End Function dim s,d
s=request.totalbytes '总字节数
d= request.binaryread(s) '读取数据
response.write replace(bin2str(d),vbcrlf,"<br>")
%>上传的数据输入
下面是处理程序的显示结果
-----------------------------7d6399db02a2
Content-Disposition: form-data; name="xm"廉东方
-----------------------------7d6399db02a2
Content-Disposition: form-data; name="jl"男,民族:汗
信息工程系高级讲师
-----------------------------7d6399db02a2
Content-Disposition: form-data; name="hy"Yes
-----------------------------7d6399db02a2
Content-Disposition: form-data; name="sex"nan
-----------------------------7d6399db02a2
Content-Disposition: form-data; name="File1"; filename="E:\Internet\桌面\book.txt"
Content-Type: text/plain00001 Visual Basic .NET编程指南 (美)Harold 北京 电子工业出版社 2003.1
00010 C#编程思想与实践 张青,郭亚萍 北京 冶金工业出版社 2002.10
00008 中文Photoshop 7.0原创风暴 肖金秀 北京 冶金工业出版社 2003.8
-----------------------------7d6399db02a2
Content-Disposition: form-data; name="File2"; filename="E:\Internet\桌面\图片.jpg"
Content-Type: text/plain虽然扩展名是.jpg,但仍然是文本文件。
-----------------------------7d6399db02a2
Content-Disposition: form-data; name="B1"提交
-----------------------------7d6399db02a2--Ldf 2006-10-8 17:41:37 1【第1楼】可以看出:
1、各数据项之间的分隔符是:
-----------------------------7d6399db02a2
2、分隔符是变化的,每次都不一样
3、分隔符单独占一行
4、数据(兰色部分)是以两个回车换行引出
5、所有数据以二进制格式上传
怎么和图片一起上传上去呢?
Stream requestStream = webrequest.GetRequestStream();
requestStream.Write(buffer, 0, bytesRead);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
requestStream.Write(postDateAddBytes, 0, postDateAddBytes.Length);
先写入图片的头
-----------------------------8cdd92a8598c646
Content-Disposition: form-data; name="file"; filename="20110422021915234.jpg"
Content-Type: image/pjpeg
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
再写入图片
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead);
再传入
传入参数
if (postDateAdd != "")
requestStream.Write(postDateAddBytes, 0, postDateAddBytes.Length);参数格式
-----------------------------8cdd92c09f2f014
Content-Disposition: form-data; name="ct"text/html
-----------------------------8cdd92c09f2f014
Content-Disposition: form-data; name="rt"http://my.anjuke.com/v2/ajax/uploadcallback/
-----------------------------8cdd92c09f2f014
Content-Disposition: form-data; name="comment"{"copyright":"anjuke","name":"楂樻湅鍧","brokerid":"516637"}
---------------------------8cdd92c09f2f014
最后是一个结束的
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
格式-----------------------------8cdd92c09f2f014--
// 读取网络资源,返回字节数组
public static byte[] getBytes(string url, CookieContainer cookie, byte[] postData, string contentType)
{
try
{
int c = url.IndexOf("/", 10);
byte[] data = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = timeOut;
request.AllowAutoRedirect = true;
if (cookie != null) request.CookieContainer = cookie;
request.Referer = (c > 0 ? url.Substring(0, c) : url);
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate"; if (postData != null) // 需要 Post 数据
{
request.Method = "POST";
if (contentType == null) contentType = "application/x-www-form-urlencoded";
request.ContentType = contentType;
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
requestStream.Close();
} HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//cookies= response.Cookies;
//wc=response.Headers;
string ce = response.Headers[HttpResponseHeader.ContentEncoding];
int ContentLength = (int)response.ContentLength;
Stream s = response.GetResponseStream();
c = 1024 * 10;
if (ContentLength < 0) // 不能获取数据的长度
{
data = new byte[c];
MemoryStream ms = new MemoryStream();
int l = s.Read(data, 0, c);
while (l > 0)
{
ms.Write(data, 0, l);
l = s.Read(data, 0, c);
}
data = ms.ToArray();
ms.Close();
}
else // 数据长度已知
{
data = new byte[ContentLength];
int pos = 0;
while (ContentLength > 0)
{
int l = s.Read(data, pos, ContentLength);
pos += l;
ContentLength -= l;
}
}
s.Close();
response.Close(); if (ce == "gzip") // 若数据是压缩格式,则要进行解压
{
unRar(ref data);
}
return data; // 返回字节数组
}
catch
{
return new byte[0];
}
} private static byte[] unRar(ref byte[] data) // 解压数据
{
try
{
MemoryStream js = new MemoryStream(); // 解压后的流
MemoryStream ms = new MemoryStream(data); // 用于解压的流
GZipStream g = new GZipStream(ms, CompressionMode.Decompress);
byte[] buffer = new byte[10240]; // 读数据缓冲区
int l = g.Read(buffer, 0, 10240); // 一次读 10K
while (l > 0)
{
js.Write(buffer, 0, l);
l = g.Read(buffer, 0, 10240);
}
g.Close();
ms.Close();
data = js.ToArray();
js.Close();
return data;
}
catch
{
return data;
}
} private byte[] Rar(ref byte[] data) // 压缩数据
{
MemoryStream ys = new MemoryStream(); // 压缩后的流
GZipStream g = new GZipStream(ys, CompressionMode.Compress);
g.Write(data, 0, data.Length);
g.Close();
data=ys.ToArray();
ys.Close();
return data;
}
if (postData != null) // 需要 Post 数据
{
request.Method = "POST";
if (contentType == null) contentType = "application/x-www-form-urlencoded";
request.ContentType = contentType;
request.ContentLength = postData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postData, 0, postData.Length);
requestStream.Close(); }
requestStream.Close();
StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
string html = sr.ReadToEnd();
return html;
requestStream.Close();
HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.UTF8);
string html = sr.ReadToEnd();
return html;