Asp.net web服务器中的WebBrowser控件未从网站返回Cookie

Asp.net web服务器中的WebBrowser控件未从网站返回Cookie,asp.net,webbrowser-control,session-cookies,defaultnetworkcredentials,Asp.net,Webbrowser Control,Session Cookies,Defaultnetworkcredentials,我试图从Web应用程序中的WebBrowser控件访问HTTPS站点,以从该站点获取一些基本信息(该站点目前没有Web服务或任何其他API) 当我从IIS Express执行此操作时,我能够连接登录并导航到其他页面,就像我从该系统上的web浏览器直接连接时一样,一切正常 从大多数开发系统,即Windows 10或Windows Server 2016,我可以发布web应用程序,连接到web应用程序,然后通过web应用程序连接到站点,登录并加载其他页面,一切正常。 但是…。 当我部署到GoDadd

我试图从Web应用程序中的WebBrowser控件访问HTTPS站点,以从该站点获取一些基本信息(该站点目前没有Web服务或任何其他API) 当我从IIS Express执行此操作时,我能够连接登录并导航到其他页面,就像我从该系统上的web浏览器直接连接时一样,一切正常

从大多数开发系统,即Windows 10或Windows Server 2016,我可以发布web应用程序,连接到web应用程序,然后通过web应用程序连接到站点,登录并加载其他页面,一切正常。 但是…。 当我部署到GoDaddy并通过应用程序连接到站点时,我能够成功登录,但当我导航到另一个页面时,我会重定向到登录页面

我注意到,在GoDaddy上浏览应用程序时,我没有得到任何JSESSION Cookies,但在所有其他成功案例中,我都得到了它们。 我在登录目标站点之前收到了JSESSON Cookies:但是任何在connect上返回Cookies的网站都应该足够了。 我已将用户代理更改为桌面上的相同代理,并已连接,但在GoDaddy上仍能获得相同的结果

我曾在受SSL保护(HTTPS)和不受SSL保护(HTTP)的GoDaddy站点上尝试过这种方法。 希望有人在使用WebBrowser控件之前遇到过此类问题

下面是代码的一个测试片段(您可能会注意到,我尝试了很多方法来解决CookiePresistance、清除Cookie、清除JScript状态等问题:

public static class NativeMethods
{
    [DllImport("wininet.dll", SetLastError = true)]
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption,
                                                 IntPtr lpBuffer, int lpdwBufferLength);

    public static void SuppressCookiePersist()
    {
        int dwOption = 81; //INTERNET_OPTION_SUPPRESS_BEHAVIOR
        int option = 3; // INTERNET_SUPPRESS_COOKIE_PERSIST

        IntPtr optionPtr = Marshal.AllocHGlobal(sizeof(int));
        Marshal.WriteInt32(optionPtr, option);

        bool x = InternetSetOption(IntPtr.Zero, dwOption, optionPtr, sizeof(int));
        Marshal.FreeHGlobal(optionPtr);
    }
    public static void EnableCookiePersist()
    {
        int dwOption = 81; //INTERNET_OPTION_SUPPRESS_BEHAVIOR
        int option = 4; // INTERNET_SUPPRESS_COOKIE_POLICY ignores policy and allows cookies to be set https://msdn.microsoft.com/en-us/library/windows/desktop/aa385328(v=vs.85).aspx

        IntPtr optionPtr = Marshal.AllocHGlobal(sizeof(int));
        Marshal.WriteInt32(optionPtr, option);

        InternetSetOption(IntPtr.Zero, dwOption, optionPtr, sizeof(int));
        option = 1;
        Marshal.WriteInt32(optionPtr, option);
        InternetSetOption(IntPtr.Zero, dwOption, optionPtr, sizeof(int));
        Marshal.FreeHGlobal(optionPtr);
    }
    public static void ClearBrowserSession()
    {
        int dwOption = 42; //INTERNET_OPTION_END_BROWSER_SESSION

        InternetSetOption(IntPtr.Zero, dwOption, IntPtr.Zero, 0);

    }
}   

public partial class TestStub: System.Web.UI.Page
{
    protected void btnNavigate_Click(object sender, EventArgs e)
    {
        NativeMethods.EnableCookiePersist();
        if(tbUrl.Text == "")
        {
            Client_Alert("Please enter url");
            return;
        }
        if (tbUserAgent.Text == "")
            tbUserAgent.Text = CurrentUserAgent;
        object o = tbUrl.Text;

        var t = new Thread((ParameterizedThreadStart)GetPage);
        t.SetApartmentState(ApartmentState.STA);
        t.Start(o);

        GettingPage = true;
        while (GettingPage == true)
            Thread.Sleep(500);
        t.Join();
        return;
    }

    private void GetPage(object o)
    {

        StringBuilder SB = new StringBuilder();
        DirectorBrowser = new WebBrowser();

        NativeMethods.ClearBrowserSession();
        DirectorBrowser.ScrollBarsEnabled = false;
        DirectorBrowser.ScriptErrorsSuppressed = true;
        DirectorBrowser.AllowNavigation = true;
        DirectorBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; '); for (e = 0; e < a.length && a[e]; e++) { f++; for (b = '.' + location.host; b; b = b.replace(/^ (?:% 5C.|[^% 5C.] +) /, '')){ for (c = location.pathname; c; c = c.replace(/.$/, '')) { document.cookie = (a[e] + '; domain=' + b + '; path=' + c + '; expires=' + new Date((new Date()).getTime() - 1e11).toGMTString()); } }}})())");
        NativeMethods.EnableCookiePersist();

        DirectorBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_NoticeCompleted);
        Uri url = new Uri((string)o);
        DirectorBrowser.Navigate(url, null, null, "User-Agent: " + tbUserAgent.Text);

        GettingPage = true;

        while (GettingPage == true)
        {
            System.Windows.Forms.Application.DoEvents();
            Thread.Sleep(500);
        }
    }
    private void browser_NoticeCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (GettingPage == true)
        {
            HtmlElement body = DirectorBrowser.Document.Body;
            HtmlElementCollection inputs = DirectorBrowser.Document.GetElementsByTagName("INPUT");
            HtmlElementCollection forms = DirectorBrowser.Document.Forms;
            body = DirectorBrowser.Document.Body;
            string webResults = body.InnerHtml;
            HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(webResults);
            htmlDoc.OptionFixNestedTags = true;

            tbMaintenanceResults.Text = "Cookies: <br>" + DirectorBrowser.Document.Cookie + "<br>" + body.InnerHtml;
            GettingPage = false;
        }
        else
        {
            GettingPage = false;
        }
    }
}
公共静态类NativeMethods
{
[DllImport(“wininet.dll”,SetLastError=true)]
私有静态外部bool InternetSetOption(IntPtr hInternet、intdwoption、,
IntPtr lpBuffer,int lpdwBufferLength);
公共静态void SuppressCookiePersist()
{
int dwOption=81;//互联网选项抑制行为
int option=3;//INTERNET\u禁止\u COOKIE\u持久化
IntPtr optionPtr=Marshal.AllocHGlobal(sizeof(int));
封送员写入32(选项PTR,选项);
boolx=InternetSetOption(IntPtr.Zero、dwOption、optionPtr、sizeof(int));
自由环球元帅(选择权PTR);
}
公共静态void enableCookiePersistence()
{
int dwOption=81;//互联网选项抑制行为
int option=4;//INTERNET\u SUPPRESS\u COOKIE\u策略忽略策略并允许设置COOKIEhttps://msdn.microsoft.com/en-us/library/windows/desktop/aa385328(v=vs.85).aspx
IntPtr optionPtr=Marshal.AllocHGlobal(sizeof(int));
封送员写入32(选项PTR,选项);
InternetSetOption(IntPtr.Zero、dwOption、optionPtr、sizeof(int));
选项=1;
封送员写入32(选项PTR,选项);
InternetSetOption(IntPtr.Zero、dwOption、optionPtr、sizeof(int));
自由环球元帅(选择权PTR);
}
公共静态无效ClearBrowserSession()
{
int dwOption=42;//INTERNET\u选项\u结束\u浏览器\u会话
InternetSetOption(IntPtr.Zero,dwOption,IntPtr.Zero,0);
}
}   
公共部分类TestStub:System.Web.UI.Page
{
受保护的void btnNavigate\u单击(对象发送方,事件参数e)
{
NativeMethods.EnableCookiePersist();
如果(tbUrl.Text==“”)
{
客户端警报(“请输入url”);
返回;
}
如果(tbUserAgent.Text==“”)
tbUserAgent.Text=CurrentUserAgent;
objecto=tbUrl.Text;
var t=新线程((ParameterizedThreadStart)GetPage);
t、 SetApartmentState(ApartmentState.STA);
t、 启动(o);
GettingPage=true;
while(GettingPage==true)
睡眠(500);
t、 Join();
返回;
}
私有void GetPage(对象o)
{
StringBuilder SB=新的StringBuilder();
DirectorBrowser=新的WebBrowser();
NativeMethods.ClearBrowserSession();
DirectorBrowser.ScrollBarsEnabled=false;
DirectorBrowser.ScriptErrorsSuppressed=true;
DirectorBrowser.AllowNavigation=true;
DirectorBrowser.Navigate(“javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split(';');for(e=0;e