【问题标题】:Open a web browser using C# win application and add request headers in the request使用 C# win 应用程序打开 Web 浏览器并在请求中添加请求标头
【发布时间】:2015-08-31 09:41:30
【问题描述】:

我有一种情况,我想模拟应用程序的 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);

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

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

【问题讨论】:

  • 为什么?您是否正在尝试测试一些 HTTP API?像 Postman 这样的东西对你有用吗?
  • @luaan 实际上我想模拟一个请求,它到达我的应用程序页面 asp.net 并且其中有请求
  • 是的,您说的是模拟请求。但是,当您不是模拟,而是实际使用 Web 应用程序时,它是如何实际使用的呢?显然,它不是通过网络浏览器,否则你已经有了你的解决方案。您想要什么作为回报,您如何处理响应?
  • @Luaan 请求来自链接锚标记,它通过 ldap 服务器在请求标头中添加一些参数

标签: c# winforms webclient


【解决方案1】:

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

【讨论】:

  • 感谢您的帮助,我使用了 firefox 插件,它对我有用。
  • 我正在寻找类似的功能。 @शेखर 你能告诉我你使用的是什么扩展。
【解决方案2】:

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

设置浏览器控件的 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多