我是新来的c#,并正在做一个简单的代理来编辑某些标题。HttpWebResponse发送到网络浏览器?
我已经使用HttpLisenter获取请求,然后使用HttpWebRequest和Response进行编辑,发送和接收。
现在我需要一些帮助将编辑后的响应发送回网络浏览器。有没有人有任何链接或例子?林难倒了:)
感谢
我是新来的c#,并正在做一个简单的代理来编辑某些标题。HttpWebResponse发送到网络浏览器?
我已经使用HttpLisenter获取请求,然后使用HttpWebRequest和Response进行编辑,发送和接收。
现在我需要一些帮助将编辑后的响应发送回网络浏览器。有没有人有任何链接或例子?林难倒了:)
感谢
你可以保存为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);
}
}
查看现有代理服务器的源代码。
这里的一个简短的例子:
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);
}
}
}
感谢您的回复... 这是一个好主意,但不会为我想要的而真正做到。 如果我不能用HttpWebResponse做到这一点,有没有其他的功能发送数据到Web浏览器? 谢谢 – arbmebor 2010-07-08 15:32:11
这是一个难以解决的问题,我无法提供代码。您必须接受来自网络上的Web浏览器的传入http请求,代表它们发出http请求,并将响应返回到原始频道。 – 2010-07-08 16:16:45
是的,它返回的响应导致问题的Web浏览器。 难道我不能使用套接字将网络浏览器连接到我的应用程序,然后使用HttpWebRequest/Response从发送的数据中发送回来吗?如果有人可以发布链接或例子? 再次感谢 – arbmebor 2010-07-08 18:01:56