public override voidProcessRequest(HttpContext context)
{//获取目标站点地址
String target = "图片服务器地址";string sid = context.Request["sid"];
target= string.Format("{0}?city=&channel=频道&sid={1}&backurl=",target,sid);if(context.Request.Files.Count>0)
{var file = context.Request.Files[0];
HttpWebRequest request= WebRequest.Create(target) asHttpWebRequest;
CookieContainer cookieContainer= newCookieContainer();
request.CookieContainer=cookieContainer;
request.AllowAutoRedirect= true;
request.Method= "POST";
request.Headers.Add("Origin", "http://" +context.Request.UrlReferrer.Host);
request.Headers.Add("Accept-Encoding", "gzip, deflate");
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
request.Headers.Add("Upgrade-Insecure-Requests", "1");
request.Referer=context.Request.UrlReferrer.OriginalString;string boundary = DateTime.Now.Ticks.ToString("X"); //随机分隔线
request.ContentType = "multipart/form-data;charset=utf-8;boundary=" +boundary;byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");//请求头部信息
StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", file.FileName));byte[] postHeaderBytes =Encoding.UTF8.GetBytes(sbHeader.ToString());//FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] bArr = new byte[file.InputStream.Length];
file.InputStream.Read(bArr,0, bArr.Length);
file.InputStream.Close();
Stream postStream=request.GetRequestStream();
postStream.Write(itemBoundaryBytes,0, itemBoundaryBytes.Length);
postStream.Write(postHeaderBytes,0, postHeaderBytes.Length);
postStream.Write(bArr,0, bArr.Length);
postStream.Write(endBoundaryBytes,0, endBoundaryBytes.Length);
postStream.Close();//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() asHttpWebResponse;
SetCookie(response,context);
}
}//response是目标服务器的响应对象,context是返回给浏览器的上下文对象
voidSetCookie(HttpWebResponse response, HttpContext context)
{foreach (Cookie cookie inresponse.Cookies)
{if (cookie.Name!=null&&cookie.Name.StartsWith("img"))
{string result=string.Empty;if (cookie.Value != null && cookie.Value.StartsWith("http://"))
{
Regex r= new Regex(@"^.*?(?=\|)");
result=r.Match(cookie.Value).Value;
}else{
result=cookie.Value;
}
context.Response.Write(result);
context.Response.End();
}
}
}