簡體   English   中英

代理主機C#問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM