Logowanie się na stronę za pomocą C#

0

Siema, już od dawna próbuję się zalogować na stronę "www.fcbarca.com" za pomocą C#, ale nic nie wychodzi.
Mógłby mi ktoś napisać kod który zaloguje program prawidłowo na tą stronę?
Nawet może być to kod zalogowania do 4programmers.net, bo jest to bardzo podobne.

0

Już tam zaglądałem i próbowałem z msdn, ale mi nie wychodziło, chodzi mi o przykład :)

1

Przy użyciu czegoś takiego jak HttpWebRequest na adres http://www.fcbarca.com/konto/zaloguj.html?r=%20/ POST'a, którego data wygląda w ten sposób user=gasdg&pass=gh4444444&remember=1. W responsie sprawdzasz czy zalogował szukając jakichś elementów w html'u, które dostępne są dopiero po zalogowaniu i to wszystko.

0

Właśnie robiłem to na dziesiątki różnych sposobów, tym co podałeś również , ale nie działało.
Czy trzeba pobrać cookie GET'em pierwszy raz po to żeby drugi raz zalogować się POST'em przy pomocy tego ciasteczka?

2

Pobierz stronę logowania
wyślij post
zrób przekierowanie jeśli jest
użyj CookieContainer do trzymania ciastek, dodaj CookieContainer do HttpWebRequest i HttpWebResponse

0

Nie da się dodać CookieContainer do HttpWebResponse, używam WebBrowser do sprawdzania "zawartości" response i pokazuje że wpisałem niepoprawną nazwę użytkownika.

CookieContainer cookies = new CookieContainer();
                        
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.fcbarca.com/konto/zaloguj.html?r=%20/");
HttpWebResponse response = null;

request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0";
request.Method = "POST";
request.CookieContainer = cookies;
request.ContentType = "text/html";

string login = "testLogin";
string password = "testPassword";

byte[] form = Encoding.UTF8.GetBytes(
    "user=" + Uri.EscapeDataString(login)
    + "&pass=" + Uri.EscapeDataString(password) +
    "&remember=1");

Stream postData = request.GetRequestStream();
postData.Write(form, 0, form.Length);
response = (HttpWebResponse)request.GetResponse();

Stream stream = response.GetResponseStream();
webBrowser1.NavigateToStream(stream);

Oczywiście podaje dane które powinny działać, a nie "TestLogin".
Próbowałem string.format wraz z konwersją do byte i było identycznie to samo.
Edit: Co ciekawe przy niepoprawnym zalogowaniu na stronę dostajemy odpowiedź że podaliśmy złe hasło i zły login, ale program dostaje odpowiedź że jest niepoprawny tylko login.
Żadna kombinacja dobrego, złego, nie wpisanego loginu czy hasła nie daje takiej odpowiedzi normalnie na stronie.

EDIT2: Dobra sam znalazłem co było źle, w content-type wpisałem typ response, a nie request, po zmienieniu działa. :)

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