C# httpwebrequest ciasteczka

0

Witam.

Mam problem z ciasteczkami w httpwebrequest.
Tutaj problem na pewno jest z ciasteczkami ponieważ kiedy ustawiam je ręcznie wszystko działa ok.

Logowanie:

CookieContainer cookie = new CookieContainer();
                    HttpWebRequest pobieranieciasteczke = (HttpWebRequest)WebRequest.Create("xxx");

                    pobieranieciasteczke.CookieContainer = cookie;
                    

                    ASCIIEncoding encoding = new ASCIIEncoding();
                    string postData = "Username=" + login + "&Password=" + pass;
                    byte[] postDataBytes = encoding.GetBytes(postData);

                    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("xxx");

                    httpWebRequest.CookieContainer = cookie;
                    
                    httpWebRequest.Method = "POST";
                    httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                    httpWebRequest.ContentLength = postDataBytes.Length;
                    httpWebRequest.AllowAutoRedirect = false;
                    httpWebRequest.Referer = "xxx"; 

I sprawdzanie:

 CookieContainer cookie = new CookieContainer();
                    HttpWebRequest pobieranieciasteczke = (HttpWebRequest)WebRequest.Create("xxx");

                    pobieranieciasteczke.CookieContainer = cookie;

                    ASCIIEncoding encoding = new ASCIIEncoding();
                    string postData = "send=test";
                    byte[] postDataBytes = encoding.GetBytes(postData);

                    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("xxx");

                    httpWebRequest.CookieContainer = cookie;
                    httpWebRequest.Method = "POST";
                    httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                    httpWebRequest.ContentLength = postDataBytes.Length;
                    httpWebRequest.AllowAutoRedirect = false;
 

Niestety nie działa. Co robię źle?

0

Zależy co znaczy "nie działa"...

I po co przy logowaniu i sprawdzaniu(cokolwiek to ma robić) tworzysz 2 razy HttpWebRequest ?

0

No porostu się nie wysyła. Sprawdzanie ma za zadanie sprawdzić czy zalogowało mnie poprawnie i wysłać wiadomość co jest możliwe dopiero po zalogowaniu.

Httpwebrequest tworzę drugi raz, ponieważ kiedy mi się nie udawało tak:

    ASCIIEncoding encoding = new ASCIIEncoding();
                    string postData = "Username=" + login + "&Password=" + pass;
                    byte[] postDataBytes = encoding.GetBytes(postData);
 
                    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("xxx");
 
                    httpWebRequest.CookieContainer = new CookieContainer();
 
                    httpWebRequest.Method = "POST";
                    httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                    httpWebRequest.ContentLength = postDataBytes.Length;
                    httpWebRequest.AllowAutoRedirect = false;
                    httpWebRequest.Referer = "xxx";  

Uznałem że trzeba zrobić 2 zapytania - to pierwsze ma za zadanie tylko pobrać ciasteczka, a dopiero to 2 zalogować

0

Ale to co wkleiłeś to jest cały kod zapytania?

Bo tam nigdzie nie masz wysyłania tych zapytań...

0

Tak to jest cały kod (oczywiście jest podpięte pod buttona)

0

ref

0
KaKtusEl napisał(a):

No porostu się nie wysyła

some_ONE napisał(a):

Ale to co wkleiłeś to jest cały kod zapytania?
Bo tam nigdzie nie masz wysyłania tych zapytań...

To w końcu masz wysyłanie, czy nie? Odpal fiddler i sprawdź, co dokładnie leci.

0

Dobra, udało mi się zrobić logowanie. Niestety problem nadal występuje ponieważ żeby wysłać wiadomość muszę być zalogowany, a (tak mi się wydaje) podczas wysyłania nie jestem ponieważ tak jakby sesja wygasa(?) (brak cookie?) czyli muszę je utrzymać jakoś, tylko jak?

0

Najprościej to w CookieContainer...

Sprawdziłeś fiddlerem/charlesem co wysyłasz na serwer, czy dalej będziesz gdybał co się dzieje?

0

Możesz do tego użyć regexa, zwracasz sobie stronę po "zalogowaniu" do stringa a później ten string porównujesz z jakimś wyrażeniem regularnym lub po prostu wyświetlasz msgboxa i sprawdzasz czy jakieś informacje wskazują na to, że jesteś zalogowany. Może łatwiej będzie jak podasz serwis, do którego chcesz się zalogować. Użyj po prostu httpwebresponse aby zobaczyć co przyszło z serwera po wysłaniu zapytania, wtedy zweryfikujesz czy się zalogowałeś czy nie.

HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
Stream receive = response.GetResponseStream();
using(StreamReader sr = new StreamReader(receive, encoding.UTF8))
{
string readResponse = sr.ReadToEnd(); // tutaj masz zwróconą całą zawartość strony po wysłaniu zapytania, sprawdź czy jest jakaś informacja, że jestem zalogowany (np widoczny przycisk wyloguj)
}
0

Ok, dzięki.
Mam tak:

Logowanie:

  var request = System.Net.WebRequest.Create("http://strona.pl") as System.Net.HttpWebRequest;
                    request.Method = "GET";
                    var cookie = new System.Net.CookieContainer(); 
                    request.CookieContainer = cookie;
                    using (var response = request.GetResponse() as System.Net.HttpWebResponse)
                    {
                        cookie.Add(response.Cookies);              
                    }
                    request =
                System.Net.WebRequest.Create(
                    "http://strona.pl/login") as
                HttpWebRequest;
                    request.Method = "POST"; 
                    request.ContentType = "application/x-www-form-urlencoded"; 
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88";
                    request.CookieContainer = cookie;
                    request.Referer = "http://strona.pl";
                    using (var stream = request.GetRequestStream()) 
                    {
                        byte[] buffer =
                            Encoding.UTF8.GetBytes(
                                string.Format(
                                    "Username={0}&Password={1}",
                                    login, passy)); 
                        stream.Write(buffer, 0, buffer.Length); 
                    }
                    using (var response = request.GetResponse() as HttpWebResponse)
                    {
                        cookie.Add(response.Cookies);
                        using (var sr = new System.IO.StreamReader(response.GetResponseStream()))
                        {
                            string Sprawdzanie = sr.ReadToEnd();
                            StreamWriter File = new StreamWriter("Sprawdzanie.txt", true);
                            File.WriteLine(Sprawdzanie);
                            File.Close();
                        }
                    } 

To jest "podpięte" pod button1

Jak mi kolega wyżej poradził zapisuję sobie stronę do pliku. Czytając plik widzę że jestem zalogowany, czyli tutaj jest ok.

Teraz wysyłanie: (tutaj jest problem)

 var request = System.Net.WebRequest.Create("http://strona.pl") as System.Net.HttpWebRequest;
                    request.Method = "GET"; 
                    var cookie = new System.Net.CookieContainer(); 
                    request.CookieContainer = cookie;
                    using (var response = request.GetResponse() as System.Net.HttpWebResponse)
                    {
                        cookie.Add(response.Cookies);                    
                    }
                    request =
                System.Net.WebRequest.Create(
                    "http://strona.pl/pw") as
                HttpWebRequest; 
                    request.Method = "POST"; 
                    request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88";
                    request.CookieContainer = cookie;
                    request.Referer = "http://strona.pl;
                    using (var stream = request.GetRequestStream()) 
                    {
                        byte[] buffer =
                            Encoding.UTF8.GetBytes(
                                string.Format(
                                    "send={0}",
                                    "Test")); 
                        stream.Write(buffer, 0, buffer.Length); 
                    }
                    using (var response = request.GetResponse() as HttpWebResponse)
                    {
                        cookie.Add(response.Cookies);
                        using (var sr = new System.IO.StreamReader(response.GetResponseStream()))
                        {
                            string SprawdzanieSend = sr.ReadToEnd();
                            StreamWriter File = new StreamWriter("SprawdzanieSend.txt", true);
                            File.WriteLine(SprawdzanieSend);
                            File.Close();
                        }
                    } 

To jest "podpięte" pod button2

Tym razem czytając plik, widzę że nie jestem zalogowany, czyli nie mogę wysłać wiadomości.

0

Według mnie to chaosu masz tutaj za dużo. Masz 2 przyciski (czyli też 2 cookie containery), w pierwszym przycisku się logujesz i cookie zapisywane są do kontenera, natomiast wciskając drugi przycisk nie korzystasz ze starych ciastek i kontenera tylko znów tworzysz nowy pusty kontener przez co sesja nie jest utrzymywana (bo kontener z przycisku do wysyłania wiadomości jest pusty, nie ma nic w sobie). Możesz podać stronę, zobaczyłbym jak to wygląda.

Nie rozumiem też wysyłania dwóch zapytań skoro z pierwszego zapytania tak naprawdę nie dostajesz nic co jest pomocne przy drugim requescie. Jeżeli za pierwszym razem logowałbyś się, zapisał ciasteczka z logowania a w drugim requeście wysłał wiadomość z poprzednimi ciasteczkami no to byłoby zrozumiałe bo trzymasz sesje w cookiesach ale tak to ??. Pobierasz ciasteczka ze "strona.pl" a później logujesz się na stronę "strona.pl/login" przy pomocy ciasteczek ze strony głównej, po co?

0

Dobra już mi się udało mi się :)
Wielkie dzięki Hoscovir.

Proszę jednak o tymczasowe nie zamykanie tematu, ponieważ bardzo możliwe że zaraz natkę się na inny problem..

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