使用system.windows.forms.browser发送cookie到web应用程序

本文关键字:cookie web 应用程序 发送 browser system windows forms 使用 | 更新日期: 2023-09-27 18:06:34

我有windows窗体应用程序。我必须通过浏览器控件创建和发送新的cookie到web应用程序(通过浏览器控件从windows窗体应用程序创建和发送新的cookie)。

这个winforms应用程序只显示一个web应用程序正在等待想要的cookie中的信息。这个web应用程序应该根据这个cookie的值做一些决定。

我发现了这个:在WebBrowser中使用CookieContainer中的cookies

但是我想避免使用:

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]

任何想法?

使用system.windows.forms.browser发送cookie到web应用程序

我没有对这个解决方案进行广泛的测试,但是它应该可以工作。我尝试了一个静态页面,并正确添加了cookie。

我所做的基本上是在文档中注入一个Javascript函数来添加cookie,然后立即调用它。

        public Form1()
        {
            InitializeComponent();
            this.Load += Form1_Load;
        }
        void Form1_Load(object sender, EventArgs e)
        {
            webBrowserControl.Navigate("file:///C:/Temp/span.html");
            webBrowserControl.Navigated += webBrowserControl_Navigated;
        }
        void webBrowserControl_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            InjectCookieSetterScript();
        }
        private void InjectCookieSetterScript()
        {
            String script =
@"function setCookie()
{
    document.cookie = ""myCookie=value;path=/"";
}";
            InjectScript(script);
            webBrowserControl.Document.InvokeScript("setCookie");
        }
        public void InjectScript(String scriptText)
        {    
            var headElements = webBrowserControl.Document.GetElementsByTagName("head");
            if (headElements.Count == 0)
            {
                throw new IndexOutOfRangeException("No element with tag 'head' has been found in the document");
            }
            var headElement = headElements[0];
            var script = webBrowserControl.Document.CreateElement("script");
            script.InnerHtml = scriptText; // "<script>" + scriptText + "</script>";
            headElement.AppendChild(script);
        }
    }