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

时间:2015-08-31 09:41:31

标签: c# winforms webclient

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

我知道我可以使用

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

但我想在网址中添加一些标题值,我想在浏览器中打开它。 我尝试过使用不同的东西,但无法在浏览器中打开它。

我使用了WebClient,如下所示

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

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

我也尝试了WebBrowser但无法模拟。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

设置webbrowser控件的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;");

Here is what the headers will look like

使用CsQuery

如果你只对返回的html的部分内容感兴趣并且可以花费时间来抓取那个html并构建你自己的UI,你可以利用CsQuery作为.Net的jQuery端口。

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);
}