2012-02-03 3 views
1

박쥐에서 벗어나 야후 API를 사용하지 마시기 바랍니다. 저는 이것을 순수 학습 경험으로하고 있으며 API를 사용하는 것이 목적을 이길 것입니다.프로그래밍 방식으로 야후 웹 사이트에 로그인하는 방법

야후 메일 (mail.yahoo.com) 또는 Flickr에 로그인 할 때 HTTP 트래픽을 살펴보기 위해 피들러를 사용하고 있습니다. 브라우저가 데이터를 https://login.yahoo.com/config/login에 게시하는 것을 봅니다. 샘플 포스트 데이터는 다음과 같습니다

.tries = 1 &하려면 .src = flickrsignin & .md5 = & .hash = &의 .js = & .last = & 프로모션 = & .intl = 우리 & .lang = EN- US .bypass = & & .partner = & & .u = 811cdp17imj21 .V = 0 = & .challenge iwQ4dJLk0KhUP8Xlpyji_8ftQ.fe .yplus = & & & PKG .emailCode = = = & & stepid .ev = 0,123,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 % 25252Friends % 25252F & .pd = flickrsignin_ver % 3D0 %의 26C % 3DJvVF95K62e6PzdPu7MBv2V8- % 26ivt % 3D % 3D 26sg % & .ws = 1 = 0 .CP & & 패드 = 15 = 15 AAD & & 팝업 = 1 = & 로그인 nkisnksd passwd를 & & .save noasno = = = & passwd_raw

여러분도 알다시피, challenge string과 같은 많은 값들이 있습니다.이 문자열은 브라우저가 어떻게 생기는지 모릅니다. 챌린지 응답을 내놓기 위해 브라우저가 수행하는 단계를 파악하려면 어떻게해야합니까? 쿠키를 사용하여 알고리즘을 사용한다고 가정합니다. 브라우저가 자동으로 알고리즘을 어떻게 알고 있는지 확실하지 않습니다.

감사합니다.

+2

y를보세요. 로그인 페이지 소스 코드. 다른 유용한 가치를 파악하는 데 도움이되는 유용한 유용한 정보가 담겨 있습니다. 웹 사이트 소스는 거의 항상 특정 페이지에서 수행하는 작업에 대한 정보를 공개합니다. –

+0

저것 봐 ... 당신은 바로 응답 문자열이 로그인 폼의 소스 코드에 맞았습니다 ... 지금 나는 302 URL을 리퍼러와 챌린지 문자열로 사용하여 게시해야합니다. 다른 쿼리 값)을 소스 코드에서 가져옵니다. 감사!! – blizz

+1

나는 이것을 y로 해본 적이 없다! 하지만 거의 항상 그렇습니다. :) –

답변

1

성공적으로 사용한 한 가지 방법은 다음과 같습니다. 기본적으로 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

또 다른 접근 방법이 있습니다. 나는 굴러 다녀!

 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(); 
관련 문제