Использование файла cookie WebRequest в WebBrowser - PullRequest
1 голос
/ 25 февраля 2012

Я хочу войти на сайт, используя WebRequest и позже показать сайт (зарегистрирован) в WebBrowser

Но как "скопировать" WebRequest cookie в WebBrowser?

Заранее спасибо,

Kacper

1 Ответ

3 голосов
/ 25 февраля 2012

используйте коллекцию файлов cookie, чтобы получить файлы cookie, в этом месяце я написал нечто похожее и могу поделиться с вами примером кода:

    static string GetFromServer(string URL, ref CookieCollection oCookie)
    {
        //first rquest
        // Create a request for the URL. 
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
        request.AllowAutoRedirect = false;
        // If required by the server, set the credentials.
        //request.Credentials = CredentialCache.DefaultCredentials;
        request.CookieContainer = new CookieContainer();
        if (oCookie != null)
        {
            foreach (Cookie cook in oCookie)
            {
                request.CookieContainer.Add(cook);
            }
        }

        // Get the response.
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        foreach (Cookie cook in response.Cookies)
        {
            oCookie.Add(cook);
        }
        // Display the status.
        while (response.StatusCode == HttpStatusCode.Found)
        {
            response.Close();
            request = (HttpWebRequest)HttpWebRequest.Create(response.Headers["Location"]);
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
            request.AllowAutoRedirect = false;
            request.CookieContainer = new CookieContainer();
            if (oCookie != null)
            {
                foreach (Cookie cook in oCookie)
                {
                    request.CookieContainer.Add(cook);
                }
            }
            response = (HttpWebResponse)request.GetResponse();
            foreach (Cookie cook in response.Cookies)
            {
                oCookie.Add(cook);
            }
        }
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        // Get the stream containing content returned by the server.
        Stream dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        // Display the content.
        Console.WriteLine(responseFromServer);
        // Clean up the streams and the response.
        reader.Close();
        response.Close();
        return responseFromServer;
    }

Теперь у вас есть файлы cookie, и вам просто нужно установить его наЭлемент управления webBrowser, импортируйте этот метод:

    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

и вызывайте его после получения файлов cookie:

    string cookie_string = string.Empty;
        foreach (Cookie cook in cookieCon)
        {
            cookie_string += cook.ToString() + ";";
            InternetSetCookie(url, cook.Name, cook.Value);
        }
        webBrowser1.Navigate(url, "", null, "Cookie: " + cookie_string + Environment.NewLine);

Обратите внимание, что это всего лишь мой тестовый код, который в основном был скопирован из msdnтак что он может глючить и вам может потребоваться больше обработки исключений

...