Как отправить куки в POST, используя SHDocVw.InternetExplorer.Navigate? - PullRequest
0 голосов
/ 27 июля 2011

Проблема: в нашей организации есть собственное приложение для единого входа, написанное на c # /. Net2, которое работает уже много лет.Недавно мы обнаружили, что приложение не работает с Outlook Web Access 2010. Несколько поисковых запросов показали пару статей от поставщиков единого входа ( Novell KB и Citrix KB ), которые ссылаются напроблема.OWA2010 выполняет javascript при отправке, который добавляет файл cookie с именем «PBack = 0», который, если он не включен в сообщение, приведет к ошибке аутентификации.

Вопрос: Как включить файл cookie в метод Navigate в SHDocVw.InternetExplorer?

//ie2 is the instance of IE (SHDocVw.InternetExplorer) containing the OWA login page
ie2.Navigate(URLToPostTo, ref vFlags, ref vTarget, ref vPost, ref vHeaders);

1 Ответ

1 голос
/ 07 сентября 2011

Этот код c # выполняет единый вход для owa 2010 в Internet Explorer.

 AutoResetEvent documentCompleteOW2010;
    void OWA2010LaunchAndSSO()
    {
        var sURL "https://owaserver.yourorg.org/owalogon.asp?

        SHDocVw.InternetExplorer explorer = new SHDocVw.InternetExplorer();
        explorer.Visible = true;
        explorer.DocumentComplete += OnIEDocumentCompleteOWA2010; // Setting the documentComplete Event to false            
        documentCompleteOW2010 = new AutoResetEvent(false);
        object mVal = System.Reflection.Missing.Value;
        explorer.Navigate(sURL, ref mVal, ref mVal, ref mVal, ref mVal);// Waiting for the document to load completely            
        documentCompleteOW2010.WaitOne(5000);

        try
        {
            mshtml.HTMLDocument doc = (mshtml.HTMLDocument)explorer.Document;
            mshtml.HTMLInputElement userID = (mshtml.HTMLInputElement)doc.all.item("username", 0);
            userID.value = "someADUserName";

            mshtml.HTMLInputElement pwd = (mshtml.HTMLInputElement)doc.all.item("password", 0);

            pwd.value = "someADPassword";
            mshtml.HTMLInputElement btnsubmit = null;
            var yada = doc.getElementsByTagName("input");
            foreach (var VARIABLE in yada)
            {
                var u = (mshtml.HTMLInputElement)VARIABLE;
                if (u.type == "submit")
                {
                    btnsubmit = u;
                }
            }
            btnsubmit.click();

        }
        catch (Exception err)
        {
            //do something
        }
        finally
        {
            //remove the event handler
            explorer.DocumentComplete -= OnIEDocumentCompleteOWA2010;
        }
    }

    private void OnIEDocumentCompleteOWA2010(object pDisp, ref object URL)
    {
        documentCompleteOW2010.Set();
    }
...