使用c# win应用程序打开web浏览器,并在请求中添加请求头

本文关键字:请求 添加 浏览器 win 应用程序 web 使用 | 更新日期: 2023-09-27 18:10:26

我有一个情况,我想模拟一个web请求来应用程序。它包含一些url值和请求头。

我知道我可以使用

启动浏览器
var url = "http://test.com";
var sInfo = new ProcessStartInfo(url);
Process.Start(sInfo);

但是我想在url中添加一些头值,我想在浏览器中打开。我试过用不同的东西,但无法在浏览器中打开它。

我使用WebClient如下

WebClient client = new WebClient();
var url = "http://test.com";
client.Headers.Add("USER", "ABC");
string text=client.DownloadString(url);

但是如何在web浏览器中使用这个字符串我不知道。

我也尝试过WebBrowser,但无法模拟。

使用c# win应用程序打开web浏览器,并在请求中添加请求头

这没有标准。如果你想传递自定义头,你需要咨询你正在使用的web浏览器。我不认为任何主流浏览器都有这样的功能,然而,Chrome和Firefox的扩展都允许你在全局为每个请求添加标题。也许这对你来说足够好,也许不够。

根据您提供的信息,我看到三个选项可以接近您想要的:

设置浏览器控件的DocumentText

如果你有一个原始的html文本,你可以设置webBrowser控件的属性DocumentText来渲染它。该控件负责加载其他资源,但无法加载相对于文档源的资源。但对于您的用例来说,这可能不是问题。

WebClient client = new WebClient();
var url = "http://stackoverflow.com";
client.Headers.Add("USER", "ABC");
string text = client.DownloadString(url);
this.webBrowser1.ScriptErrorsSuppressed = true;
this.webBrowser1.DocumentText = text;

使用导航方法

Navigate方法有一个重载,它接受一个额外的头参数。

this.webBrowser1.ScriptErrorsSuppressed = true;
this.webBrowser1.Navigate("http://stackoverflow.com", 
                           null, 
                           new byte[]{}, 
                          "USER: ABC;");

标题如下

使用CsQuery

如果你只对返回的部分html感兴趣,并且可以花时间抓取这些html并构建自己的UI,你可以利用CsQuery,这是一个jQuery到。net的移植。

WebClient client = new WebClient();
var url = "http://stackoverflow.com";
client.Headers.Add("USER", "ABC");
string text = client.DownloadString(url);
var csdoc = CsQuery.CQ.CreateDocument(text);
foreach(var q in csdoc.Find("a.question-hyperlink"))
{
    Debug.WriteLine(q.InnerText);
}