【问题标题】:.net WinForms WebBrowser resets headers on redirect.net WinForms WebBrowser 在重定向时重置标头
【发布时间】:2014-12-07 18:21:31
【问题描述】:

内部网络服务器要求我提供自定义 http 标头才能访问网页。这在大多数情况下都可以正常工作,但如果 html 或 javascript 启动重定向或使用 AJAX 请求,它就不再使用我的标头了。

有没有办法改变这种行为,让它总是发送我的自定义标头?

    private void Form1_Load(object sender, EventArgs e)
    {
        webBrowser1.Navigate("http://localhost/test.php", null, null, "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\r\nSomething-Custom: TestValue");
    }

php文件中的Javascript代码:

<script>
window.location="?redirect";
</script>

第一个请求收到我的标头“Something-Custom”,而带有 ?redirect 的第二个请求没有。我还添加了用户代理来验证它确实重置了所有标题。

【问题讨论】:

    标签: .net winforms header


    【解决方案1】:

    有几种可能的方法可以做到这一点。研究领域非常广泛。

    覆盖每个导航的标题

    挂钩Navigating 事件,取消它并使用所需的标头调用Navigate(不要取消此事件:)

    你甚至可以load data outside of WebBrowser control

    导航前更改标题

    如果您不喜欢取消请求然后重新发出请求的想法,那么您可以尝试挂钩 Navigating 事件并更新标头。

    这就是问题所在:IWebBrower2 控件本身提供标题作为BeforeNavigate event 的参数。但是当 .NET 代码 handles this event 时,标头不会在 WebBrowserNavigatingEventArgs 中为客户端代码公开。

    可能的解决方案是您创建自己的 WebBrowserEvent 版本,子类 WebBrowser 控件,重写 CreateSink 方法以连接您的 WebBrowserEvent 版本。此版本应正确处理标头。

    因此您可以在导航之前更改标题。

    调整 Javascript 端 - 有点模糊。

    您可以通过 WebBrowser.ObjectForScripting 属性将浏览器应用程序与客户端连接 - 它可用于 Javascript 对象,如 window.external

    您可以挂钩链接点击事件,或构建自己的方法来通知外部对象有关导航需求。

    然后您将能够从 .NET 端执行所有导航,并根据需要指定标头。

    系统代理

    设置本地代理(您可以尝试使用 Fiddler)。您将能够进行任何您希望的标题操作。 WebBrowser 控件将使用 IE 配置中的代理的唯一问题。

    【讨论】:

    • 很好的答案!有很多方法。我的问题是通过使用您的第一个解决方案来解决的,取消每个导航事件并用我自己的标题调用它们。如果您只想更改用户代理或设置代理 UrlMkSetSessionOption
    • 您能否详细说明“导航前更改标题”?我确实已经覆盖了 CreateSink,我想为每个签名导航添加一个标题。
    • @Simone - 类似于docs.microsoft.com/en-us/dotnet/api/… 自定义类“WebBrowser2EventHelper”可以在 BeforeNavigate 方法中接收标头(本示例中未实现),在这里您可以在传递给 Web 浏览器之前更改它们。
    • @mikalai - 您的意思是在 BeforeNavigate 中更改事件本身的标题还是在其中处理导航并使用正确的标题开始调用 Navigate 的新导航?从我的测试来看,第一个没有效果,第二个对 IFrame 造成了问题……但也许我做错了。谢谢。
    • @Simone 是的,第一种方式看起来更一致。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2016-12-20
    相关资源
    最近更新 更多