[英]Proxy host C# problem
我的代理用法:“ Proxy.ashx?url =”
碼:
<%@ WebHandler Language="C#" Class="Proxy" %>
public class Proxy : IHttpHandler {
public void ProcessRequest (HttpContext context) {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(context.Request["url"]);
request.UserAgent = context.Request.UserAgent;
request.ContentType = context.Request.ContentType;
request.Method = context.Request.HttpMethod;
byte[] trans = new byte[1024];
int offset = 0;
int offcnt = 0;
if (request.Method.ToUpper() == "POST")
{
Stream nstream = request.GetRequestStream();
while (offset < context.Request.ContentLength)
{
offcnt = context.Request.InputStream.Read(trans, offset, 1024);
if (offcnt > 0)
{
nstream.Write(trans, 0, offcnt);
offset += offcnt;
}
}
nstream.Close();
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
context.Response.ContentType = response.ContentType;
using (Stream receiveStream = response.GetResponseStream())
{
offset = 0;
offcnt = receiveStream.Read(trans, offset, 1024);
while (offcnt>0)
{
context.Response.OutputStream.Write(trans, 0, offcnt);
offset += offcnt;
if (offcnt >= 0)
{
try
{
offcnt = receiveStream.Read(trans, offset, 1024);
}
catch (Exception)
{
break;
}
}
else
break;
}
}
context.Response.OutputStream.Close();
context.Response.Flush();
response.Close();
}
}
public bool IsReusable {
get {
return false;
}
}
}
結果我總是空白頁(Proxy.ashx?url = http://www.google.com )...知道我犯了什么錯誤嗎?
對於POST處理,ContentLength可能為0,請不要依賴它。 只需打開流並讀取盡可能多的內容,直到流不再返回任何數據即可。
對於其余部分,讀入數組時的偏移量必須保持為0,因為它是數組而不是流的偏移量。
using (Stream receiveStream = response.GetResponseStream()) {
for (int offcnt = receiveStream.Read(trans, 0, trans.Length); offcnt > 0; offcnt = receiveStream.Read(trans, 0, trans.Length)) {
context.Response.OutputStream.Write(trans, 0, offcnt);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.