使用 C# win 应用程序打开 Web 浏览器并在请求中添加请求 headers

Open a web browser using C# win application and add request headers in the request

我有一种情况,我想模拟一个到达应用程序的 Web 请求。它包含一些 url 值和请求 Headers.

我知道我可以使用

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

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

我用过WebClient如下

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

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

我也试过WebBrowser但无法模拟。

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

设置浏览器控件的文档文本

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

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

this.webBrowser1.ScriptErrorsSuppressed = true;
this.webBrowser1.DocumentText = text;

使用导航方法

Navigate 方法有一个重载,需要一个额外的 header 参数。

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

Here is what the headers will look like

使用 CsQuery

如果您只对返回的 html 的一部分感兴趣并且有能力花时间抓取您自己的 html 和 build-up UI 您可以利用 CsQuery 这是一个 jQuery .Net 端口。

WebClient client = new WebClient();
var url = "http://whosebug.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);
}

没有这方面的标准。如果你想通过自定义headers,你需要咨询你正在使用的网络浏览器。不过,我不认为任何主流浏览器都有这样的功能 - 但是,Chrome 和 Firefox 都有扩展,允许您 globally 添加 headers 对每一个请求。也许这对你来说已经足够了,也许还不够。