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.
https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.118).aspx
Wszystko prawie gotowe
Już tam zaglądałem i próbowałem z msdn, ale mi nie wychodziło, chodzi mi o przykład :)
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.
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?
Pobierz stronę logowania
wyślij post
zrób przekierowanie jeśli jest
użyj CookieContainer do trzymania ciastek, dodaj CookieContainer do HttpWebRequest i HttpWebResponse
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. :)