我有一种情况,我想模拟应用程序的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
但无法模拟。
答案 0 :(得分:2)
没有标准。如果要传递自定义标头,则需要查阅正在使用的Web浏览器。我不认为任何主流浏览器都有这样的功能 - 但是,Chrome和Firefox都有扩展功能,允许您全局为每个请求添加标头。也许这对你来说足够好,也许不是。
答案 1 :(得分:1)
根据您提供的信息,我会看到三个选项以接近您想要的内容:
如果您有原始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
如果你只对返回的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);
}