2010-07-08 85 views
2

我是新来的c#,并正在做一个简单的代理来编辑某些标题。HttpWebResponse发送到网络浏览器?

我已经使用HttpLisenter获取请求,然后使用HttpWebRequest和Response进行编辑,发送和接收。

现在我需要一些帮助将编辑后的响应发送回网络浏览器。有没有人有任何链接或例子?林难倒了:)

感谢

回答

0

你可以保存为HTML文件的响应,然后用命令来打开文件,启动浏览器。

class Program 
{ 
    static int Main() { 
     WebRequest wr = HttpWebRequest.Create("http://google.com/"); 
     HttpWebResponse wresp = (HttpWebResponse)wr.GetResponse(); 

     string outFile = @"c:\tmp\google.html"; 

     using (StreamReader sr = new StreamReader(wresp.GetResponseStream())) 
     { 
      using(StreamWriter sw = new StreamWriter(outFile, false)) { 
        sw.Write(sr.ReadToEnd()); 
      } 
     } 

     BrowseFile(outFile); 

     return 0; 
    } 

    static void BrowseFile(string filePath) 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.FileName = @"C:\Program Files (x86)\Mozilla Firefox\firefox.exe"; 
     startInfo.Arguments = filePath; 
     Process.Start(startInfo); 
    } 
} 
+0

感谢您的回复... 这是一个好主意,但不会为我想要的而真正做到。 如果我不能用HttpWebResponse做到这一点,有没有其他的功能发送数据到Web浏览器? 谢谢 – arbmebor 2010-07-08 15:32:11

+0

这是一个难以解决的问题,我无法提供代码。您必须接受来自网络上的Web浏览器的传入http请求,代表它们发出http请求,并将响应返回到原始频道。 – 2010-07-08 16:16:45

+0

是的,它返回的响应导致问题的Web浏览器。 难道我不能使用套接字将网络浏览器连接到我的应用程序,然后使用HttpWebRequest/Response从发送的数据中发送回来吗?如果有人可以发布链接或例子? 再次感谢 – arbmebor 2010-07-08 18:01:56

3

这里的一个简短的例子:

public void ProcessRequest(HttpContext context) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create([NEW_URL]); 
    request.Timeout = 1000 * 60 * 60; 

    request.Method = context.Request.HttpMethod; 

    if (request.Method.ToUpper() == "POST") 
    { 
     Stream sourceInputStream = context.Request.InputStream; 
     Stream targetOutputStream = request.GetRequestStream(); 
     sourceInputStream.CopyTo(targetOutputStream);     
    } 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    context.Response.ContentType = request.ContentType; 

    using (response) 
    { 
     Stream targetInputStream = response.GetResponseStream(); 
     Stream sourceOutputStream = context.Response.OutputStream; 
     targetInputStream.CopyTo(sourceOutputStream);     
    } 
} 

这假定以下扩展方法被定义(I认为使用这使得样品更具可读性):

public static void CopyTo(this Stream input, Stream output) 
{ 
    using (input) 
    using (output) 
    { 
     byte[] buffer = new byte[1024]; 
     for (int amountRead = input.Read(buffer, 0, buffer.Length); amountRead > 0; amountRead = input.Read(buffer, 0, buffer.Length)) 
     { 
      output.Write(buffer, 0, amountRead); 
     }     
    } 
}