как войти на сайт Yahoo программно - PullRequest
1 голос
/ 03 февраля 2012

Сразу - пожалуйста, не предлагайте мне использовать Yahoo API.Я делаю это исключительно как опыт обучения, и использование API может нанести ущерб цели.

Я использую Fiddler для просмотра HTTP-трафика при входе в почту Yahoo (mail.yahoo.com) или Flickr.Я вижу, что браузер отправляет данные в https://login.yahoo.com/config/login. Пример данных публикации:

.tries = 1 & .src = flickrsignin & .md5 = &. Hash = &. Js = &. Last= & промо = &. междунар = мы & .lang = EN-US & .bypass = &. партнер = &. и = 811cdp17imj21 & .в = 0 & .challenge = iwQ4dJLk0KhUP8Xlpyji_8ftQ.fe & .yplus = &. emailCode = & упак = & stepid = &. эв= & hasMsgr = 1 & .chkP = Y & .done = HTTPS% 3A% 2F% 2Flogin.yahoo.com% 2Fconfig% 2Fvalidate% 3F.src% 3Dflickrsignin% 26.pc% 3D8190% 26.scrumb% 3D0% 26.pd% 3Dc% 253DJvVF95K62e6PzdPu7MBv2V8-% 26.intl% 3Dus% 26.done% 3Dhttp% 253A% 252F% 252Fwww.flickr.com% 252Fsignin% 252Fyahoo% 252F% 253Fredir% 253d% 25252Fphotos% 25252Ffriends% 25252F & .PD = flickrsignin_ver% 3D0% 26с%3DJvVF95K62e6PzdPu7MBv2V8-% 26ivt% 3D% 26sg% 3D & .ws = 1 & .cp = 0 & pad = 15 & aad = 15 & popup = 1 & login = nkisnksd & passwd = noasno & .save = & passwd_raw = * 100 * * 100 *значения там, такие как строка вызова, которую я не знаю, как браузер это делает.Как я могу выяснить, какие шаги предпринимает браузер для ответа на вызов?Я предполагаю, что это алгоритм, использующий файлы cookie, сохраненные при получении страницы, но я просто не уверен, как браузер автоматически знает алгоритм?

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 октября 2012

Вот один подход, который я успешно использовал.По сути, вы используете элемент управления C # WebBrowser и переходите к URL-адресу входа.Затем вы перебираете элементы, чтобы найти поля логина и пароля (вам нужно посмотреть на источник страницы, чтобы узнать их имена).Затем вы имитируете нажатие на кнопку входа.

    void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        //loaded the Yahoo login page
        if (browser.Url.AbsoluteUri.Contains(loginUrl))
        {
            if (browser.Document != null)
            {
                //Find and fill the "username" textbox
                HtmlElementCollection collection = browser.Document.GetElementsByTagName("input");
                foreach (HtmlElement element in collection)
                {
                    string name = element.GetAttribute("id");
                    if (name == "username")
                    {
                        element.SetAttribute("value", _login);
                        break;
                    }
                }

                //Find and fill the "password" field
                foreach (HtmlElement element in collection)
                {
                    string name = element.GetAttribute("id");
                    if (name == "passwd")
                    {
                        element.SetAttribute("value", _password);
                        break;
                    }
                }

                //Submit the form
                collection = browser.Document.GetElementsByTagName("button");
                foreach (HtmlElement element in collection)
                {
                    string name = element.GetAttribute("id");
                    if (name == ".save")
                    {
                        element.InvokeMember("click");
                        break;
                    }
                }
            }
        }
    }
0 голосов
/ 22 октября 2012

Вот еще один подход, который тоже сработал.Я в движении!

        CookieContainer _yahooContainer;
        string _login = "myyahoologin";
        string _password = "myyahoopassword";

        string strPostData = String.Format("login={0}&passwd={1}", _login, _password);

        // Setup the http request.
        HttpWebRequest wrWebRequest = WebRequest.Create(LoginUrl) as HttpWebRequest;
        wrWebRequest.Method = "POST";
        wrWebRequest.ContentLength = strPostData.Length;
        wrWebRequest.ContentType = "application/x-www-form-urlencoded";
        _yahooContainer = new CookieContainer();
        wrWebRequest.CookieContainer = _yahooContainer;

        // Post to the login form.
        using (StreamWriter swRequestWriter = new StreamWriter(wrWebRequest.GetRequestStream()))
        {
            swRequestWriter.Write(strPostData);
            swRequestWriter.Close();           
        }

        // Get the response.
        HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();

        if (hwrWebResponse.ResponseUri.AbsoluteUri.Contains("my.yahoo.com"))
        {
            // you authenticated properly
        }

        // Now use the cookies to create more requests.
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_downloadUrl);
        req.CookieContainer = _yahooContainer;
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...