Logowanie do allegro.pl

0

Witam, chciałbym zalogować się do serwisu allegro.pl (ale nie przez to API od allegro). Wysyłam odpowiedni request, ale nie działa on do końca sprawnie, tzn po wysłaniu danych POST nie dostaję ciastek, a korzystając z wtyczki IEWatch widzę, że przeglądarka ciastka dostaje. Poza tym dostaje też w odpowiedzi nagłówek "Location" którego ja znowu nie mam.

sposób działania jest taki:

Podany niżej kod testowałem do logowania się na forach i działa.

Oto kod:

        void PrepareCookies(HttpWebRequest webRequest, ref CookieCollection myCookies)
        {
            CookieCollection cc = new CookieCollection();
            foreach (Cookie cook in myCookies)
            {
                if (cook.Expires.CompareTo(DateTime.Now) < 0) cc.Add(cook);
                else { cook.Expires.AddHours(4); cc.Add(cook); } //robie tak, zeby wyslalo przestarzale cookies, bo dostaje opoznione o godzine, a w iewatchu widze, ze je tez odsyla
            }
            myCookies = cc;

            webRequest.CookieContainer = new CookieContainer();
            if (myCookies != null &&
              myCookies.Count > 0)
                webRequest.CookieContainer.Add(myCookies);
        }

        void UpdateCookies(CookieCollection source, CookieCollection dest)
        {
              if (source.Count > 0)
              if (dest == null)
              {
               dest = source;
              }
              else
              {
                   // If we already have cookies update list
                   foreach (Cookie oRespCookie in
                        source)
                   {
                         bool bMatch = false;
                         foreach(Cookie oReqCookie in
                             dest) {
                          if (oReqCookie.Name ==
                            oRespCookie.Name)  
                          {
                                oReqCookie.Value =
                                       oRespCookie.Value;
                                bMatch = true;
                                break;
                          }
                         }
                         if (!bMatch)
                          dest.Add(oRespCookie);
                   }
              }
        }

        string HttpCommunication(string uri, string parameters) //uri-wiadomo, parameters to: user_login=log&user_password=haslo
        {   
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
            webRequest.ContentType = "application/x-www-form-urlencoded";

            if (parameters.Length <= 0) webRequest.Method = "GET";
            else webRequest.Method = "POST";

            webRequest.ProtocolVersion = HttpVersion.Version10;
            webRequest.UserAgent = uagentParam2;
            webRequest.KeepAlive = true;
            webRequest.Accept = acceptHeader;

            PrepareCookies(webRequest, ref Cookies);

            StreamReader reader = new StreamReader(webRequest.GetRequestStream(), Encoding.UTF8);
            string result = reader.ReadToEnd();
            MessageBox.Show(result);
            return "bla";
            if (parameters.Length > 0)
            {
                byte[] bytes = Encoding.ASCII.GetBytes(parameters);
                webRequest.ContentLength = bytes.Length;
                Stream requestStream = webRequest.GetRequestStream();
                try
                {
                    requestStream.Write(bytes, 0, bytes.Length);
                }
                catch (WebException ex)
                {
                    MessageBox.Show(ex.Message, "HttpPost: Request error",
                       MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    if (requestStream != null)
                        requestStream.Close();

                }
            }
            try
            { // get the response
                HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
                if (webResponse == null)
                { return null; }
                UpdateCookies(webResponse.Cookies, this.Cookies);

                StreamReader sr = new StreamReader(webResponse.GetResponseStream());
                return sr.ReadToEnd();
            }
            catch (WebException ex)
            {
                MessageBox.Show(ex.Message, "HttpPost: Response error",
                   MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return null;
        } // end HttpPost 

private string uagentParam2 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";

schemat dzialania :
HttpCommunication("https://ssl.allegro.pl/enter_[...]php?request_server=allegro.pl", "");
HttpCommunication("https://ssl.allegro.pl/login.php?request_server=allegro.pl", "user_login=login&user_password=password");

Bardzo przepraszam, że to takie pokręcone, ale ciekawi mnie rozwiązanie tego problemu.

0

do webRequest dodaj

webRequest.AllowAutoRedirect = false;

i jak dostaniesz odpowiedź to tam będziesz miał cookies a po ich zapisaniu dopiero przechodzisz na stronę którą masz podaną w

Location:

Problem ten bierze się z tego, że po zalogowaniu do allegro następuje przekierowanie na kolejną stronę i cookies są pomijane.

Ściągnij sobie HTTPAnalyzer i tak wszystko widać jak na dłoni.

0

oo, bardzo dziękuję za szybką odpowiedź, znalazły się brakujące cookies:)

Ale teraz dalej podążam za wszystkimi linkami tak jak dostaje w odpowiedziach (czyli takie same jak mi IEWatch pokazuje) ale przy końcu niestety dostaję stronę, gdzie pisze, że przeglądarka nie obsługuje mi cookies.

(a o jaki HTTPAnalyzer Ci chodziło, bo jak googluje, to jest tam ogromna rzesza tego typu narzędzi)

0

http://www.ieinspector.com/httpanalyzer/ pewnie oto chodziło

pozdr.

0

oO, dziękuję bardzo, świetny programik :)

Czyli widać, że moja aplikacja nie wysyła do ostatniej stronki: http://allegro.pl/error/access_error.php?no_dir=1
tych pięciu cookies które do tej pory uzbierała, chociaż w zmiennej Cookies cały czas bytują. Wiecie może czemu ?

0

dziękuję jeszcze raz wszystkim za pomoc.

Problem rozwiązałem:)
Rozwiązanie:
adres ostatniej stronki to http://allegro.pl/error/access_error.php?no_dir=1
a we wszystkich cookies Domain była ustawiona na ".allegro.pl"
zmieniłem tylko przed wysłaniem tą wartość na "allegro.pl" i wszystko było już dobrze :)

0

nieźle..

a może mi ktoś pomóc w zalogowaniu na MiastoPlusa?
dostaje w odpowiedzi strone logowania :/

public static int SendSMSplus(string user, string pass, string msg, string tel)
{
    string postData = "op=login&login=" + user + "&password=" + pass + "&x=78&y=8";

    byte[] bdata = System.Text.ASCIIEncoding.ASCII.GetBytes(postData);

    string url = @"https://www1.plus.pl/sso/logowanie/login.html";

    try
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Accept = "*";
        req.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1";
        req.ContentLength = bdata.Length;
        req.ContentType = @"application/x-www-form-urlencoded";
        req.Method = "POST";
        req.CookieContainer = new CookieContainer();
        req.KeepAlive = true;

        Stream reqStream = req.GetRequestStream();
        reqStream.Write(bdata, 0, bdata.Length);
        reqStream.Close();

        HttpWebResponse res = (HttpWebResponse)req.GetResponse();

        Stream resStream = res.GetResponseStream();
        StreamReader reader = new StreamReader(resStream);
        string data = reader.ReadToEnd();

        if (data.Contains("Stan twojego konta umożliwia wysłanie"))
        {
            Console.WriteLine("Success!!!!!!!!!!!!!!!!!");
            System.Console.Beep(1250, 80);
            System.Threading.Thread.Sleep(50);
            System.Console.Beep(1250, 80);
        }
        else
        {
            Console.WriteLine("DUPA");
            Console.WriteLine(data);
            System.Console.Beep(400, 300);
        }
    }
}
0

już sobie poradziłem..
wszystko działa..

0

Jak rozwiazales problem to wrzuc odpowiedz. Moze ktos bedzie jeszcze kiedys mial z tym problem to znajdzie Od razu odpowiedz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0