Как использовать HttpWebRequest для входа на сайт - PullRequest
2 голосов
/ 29 ноября 2011

Может ли кто-нибудь помочь мне разобраться, как войти на страницу с помощью HttpWebRequest и впоследствии очистить страницу. Код, который я использую, не просто записывает разметку на странице входа, но не может войти ... сайт, на который я пытаюсь войти, является сайтом на основе php.

        // first, request the login form to get the viewstate value
        HttpWebRequest webRequest = WebRequest.Create("loginPageUrl") as HttpWebRequest;
        StreamReader responseReader = new StreamReader(
              webRequest.GetResponse().GetResponseStream()
           );
        string responseData = responseReader.ReadToEnd();
        responseReader.Close();


        string postData = String.Format("Username={0}&Password={1}", "user", "pwd");

        // have a cookie container ready to receive the forms auth cookie
        CookieContainer cookies = new CookieContainer();

        // now post to the login form
        webRequest = WebRequest.Create("loginPostUrl") as HttpWebRequest;
        webRequest.Method = "POST";
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.CookieContainer = cookies;

        // write the form values into the request message
        StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
        requestWriter.Write(postData);
        requestWriter.Close();

        // we don't need the contents of the response, just the cookie it issues
        webRequest.GetResponse().Close();

        // now we can send out cookie along with a request for the protected page
        webRequest = WebRequest.Create("PageToScrapeUrl") as HttpWebRequest;
        webRequest.CookieContainer = cookies;
        responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());

        // and read the response
        responseData = responseReader.ReadToEnd();
        responseReader.Close();

        Console.WriteLine(responseData);
        Console.ReadKey();

1 Ответ

0 голосов
/ 29 ноября 2011

Захватите реальный трафик браузера с помощью такого инструмента, как WireShark, посмотрите, что он отправляет, и вернитесь. Затем скопируйте поведение в ваш код. База вашего кода правильная, вам просто нужно настроить его.

...