C# 阻止webbrowser向css文件发送请求

C# 阻止webbrowser向css文件发送请求,c#,.net,webbrowser-control,C#,.net,Webbrowser Control,我想创建webbrowser(在.Net webbrowser控件的帮助下),它的请求可以控制。 例如 我可以通过删除img src来防止图像加载。 但我无法找到某种方法来限制webbrowser控件对css文件、js文件的请求以及对css文件中使用的图像文件的请求。 这一限制是有条件的。对于一些网站,我希望一切都是自然的,但对于一些网站,它应该是可配置的 原因:希望向服务器发送更少的请求,增加响应时间并减少通信量 我使用下面的代码来防止加载图像。同样的道理,我想要一些逻辑,这将阻止发送请求到c

我想创建webbrowser(在.Net webbrowser控件的帮助下),它的请求可以控制。 例如 我可以通过删除img src来防止图像加载。 但我无法找到某种方法来限制webbrowser控件对css文件、js文件的请求以及对css文件中使用的图像文件的请求。 这一限制是有条件的。对于一些网站,我希望一切都是自然的,但对于一些网站,它应该是可配置的

原因:希望向服务器发送更少的请求,增加响应时间并减少通信量

我使用下面的代码来防止加载图像。同样的道理,我想要一些逻辑,这将阻止发送请求到css或任何其他文件,我可以决定

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) { if (webBrowser1.Document != null) { foreach (HtmlElement imgElemt in webBrowser1.Document.Images) { if (imgElemt.Id == "divImagePath") { continue; } imgElemt.SetAttribute("src", ""); } } } 私有无效webBrowser1_ProgressChanged(对象发送方,WebBrowserProgressChangedEventArgs e) { 如果(webBrowser1.Document!=null) { foreach(webBrowser1.Document.Images中的HtmlElement imgElemt) { if(imgElemt.Id==“divImagePath”) { 持续 } SetAttribute(“src”和“”); } } }
您最好使用
System.Net.Http.HttpClient
来请求页面。这样,您就可以获得提供给您的网页。您可以解析页面,从站点获取您想要的内容,并以相同的方式请求这些项目

HttpClient client = new HttpClient();

try 
{
  // Make an asynchronous call to get the web page
  HttpResponseMessage response = await client.GetAsync("http://www.msn.com/");
  response.EnsureSuccessStatusCode();
  string responseBody = await response.Content.ReadAsStringAsync();

  // Do something more useful with the returned page
  Console.WriteLine(responseBody);
}  
catch(HttpRequestException e)
{
  Console.WriteLine("\nException Caught!"); 
  Console.WriteLine("Message :{0} ", e.Message);
}

// Need to call dispose on the HttpClient object when we 
// are done using it, so the app doesn't leak resources
client.Dispose(true);

如果需要显示所拉取的内容,可以在窗体上的WebBrowser控件中显示。但这将拖拽与页面相关的所有内容。

这是一个回答可能非常长的问题-为什么不发布您到目前为止编写的代码,并询问有关代码的具体问题?我对HttpWebRequest有很好的掌握。但我只想要WebBrowser控件的解决方案。谢谢你的回复。使用WebBrowser控件的目的不就是让它像一个完整的web浏览器一样工作吗?这将包括获取网页所需的所有内容。你可以做你想做的事情,但是你必须重载/覆盖太多的接口,这样从头开始就更简单了。很好。但我不确定从哪里开始。我还考虑了一个代理服务器,在那里我将从浏览器获取所有请求,然后只允许我想要的请求。但问题是我只知道C#,不确定是否有开源C#代理服务器代码可用。你认识谁吗?那是另一个问题。您可以使用上面的代码(如果需要异步web读取)或HttpWebRequest(用于同步web读取)作为替换WebBrowser控件的基础。使用上面的代码发出对所需网页的请求。一旦它返回(就在Console.WriteLine(responseBody);)之前),就以您想要的任何格式显示它。解析页面以确定可能需要获取的其他内容(CSS、Javascript等)。你需要的时候去拿。根据需要冲洗并重复。