2009-04-08 9 views
0

Mon utilisation de proxy: "Proxy.ashx url ="hôte Proxy C# problème

code:

<%@ 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; 
    } 
} 

}

Je reçois toujours une page blanche comme résultat (Proxy.ashx? url = http://www.google.com) ... Une idée de quelle erreur ai-je fait?

Répondre

1

Pour la gestion POST, ContentLength peut être 0, ne vous y fiez pas. Ouvrez simplement le flux et lisez autant que vous le pouvez jusqu'à ce que le flux ne renvoie plus de données. Pour le reste, le décalage lors de la lecture dans le tableau doit rester 0, puisqu'il s'agit du décalage du tableau et non du flux.

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

Merci! "Pour le reste, le décalage lors de la lecture dans le tableau doit rester 0, puisqu'il s'agit du décalage du tableau et non du flux." Que proposez-vous pour résoudre ce problème? – Paul

+0

Merci! Ça a bien marché! – Paul