Is it possible to transfer authentication from Webbrowser to WebRequest

后端 未结 9 2094
无人共我
无人共我 2020-11-27 14:10

I\'m using webbrowser control to login any site. And then i want to download some sub page html using WebRequest (or WebClient). This links must requires authentication.

9条回答
  •  粉色の甜心
    2020-11-27 14:40

    If the question is only "How to transfer Webbrowser authentication information to Webrequest or Webclient?" this code is enough:

    You can call the GetUriCookieContainer method that returns you a CookieContainer that can be used for subsequent call with WebRequest object.

      [DllImport("wininet.dll", SetLastError = true)]
        public static extern bool InternetGetCookieEx(
            string url, 
            string cookieName, 
            StringBuilder cookieData, 
            ref int size,
            Int32  dwFlags,
            IntPtr  lpReserved);
    
        private const Int32 InternetCookieHttponly = 0x2000;
    
    /// 
    /// Gets the URI cookie container.
    /// 
    /// The URI.
    /// 
    public static CookieContainer GetUriCookieContainer(Uri uri)
    {
        CookieContainer cookies = null;
        // Determine the size of the cookie
        int datasize = 8192 * 16;
        StringBuilder cookieData = new StringBuilder(datasize);
        if (!InternetGetCookieEx(uri.ToString(), null, cookieData, ref datasize, InternetCookieHttponly, IntPtr.Zero))
        {
            if (datasize < 0)
                return null;
            // Allocate stringbuilder large enough to hold the cookie
            cookieData = new StringBuilder(datasize);
            if (!InternetGetCookieEx(
                uri.ToString(),
                null, cookieData, 
                ref datasize, 
                InternetCookieHttponly, 
                IntPtr.Zero))
                return null;
        }
        if (cookieData.Length > 0)
        {
            cookies = new CookieContainer();
            cookies.SetCookies(uri, cookieData.ToString().Replace(';', ','));
        }
        return cookies;
    }
    

提交回复
热议问题