2009-04-08 51 views
0

我的代理用法: 「的proxy.ashx URL =」代理主機C#問題

代碼:

<%@ 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)... 任何想法我犯了什麼錯誤?

回答

1

對於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); 
    } 
} 
+0

Thanks! 「對於其他情況,讀入數組時的偏移量必須保持爲0,因爲它是數組的偏移量而不是流的偏移量。」 你有什麼建議來解決這個問題? – Paul 2009-04-08 15:04:13

+0

謝謝!這很好用! – Paul 2009-04-08 15:42:55