Witam wszystkich,
Na początku chciałbym napisać ,że nigdy nie bawiłem się w łącznie aplikacji pisanych w c# z stronami internetowymi, natomiast znam podstawy tego języka. Mój problem jest następujący podjąłem się w ramach czysto ćwiczeniowych napisania aplikacji planu lekcji dla mojej uczelni. Niestety mimo ,że strona mojej Politechnika posiada system usos to nie ma dla niej api. I stąd pomysł aby plan wziąć z logowania na stronę internetową. Niestety mimo wielu prób i szukania informacji nie jestem w stanie się zalogować. Podejrzewa ,że problem leży w tym ,że nie do końca rozumiem kod którego używam i tym ,że logowanie do tej strony jest nieco inne bo w ciasteczku jest dodatkowo numer randomowo losowany ,który łatwo wyciągnąć z kodu strony.
void pobierz(string login, string password)
{
string formUrl = "https://cas.po.edu.pl/login";
string cookieHeader;
string pageSourceFirst;
WebRequest req = WebRequest.Create(formUrl);
WebResponse getResponse1 = req.GetResponse();
using (StreamReader sr = new StreamReader(getResponse1.GetResponseStream()))
{
pageSourceFirst = sr.ReadToEnd();
}
int pozycja = pageSourceFirst.IndexOf("name=\"lt\"");
int i= pozycja + 17;
bool test= true;
string LT="";
while (test)
{
if (pageSourceFirst[i] == '"')
{
test = false;
}
else
{
LT += pageSourceFirst[i];
}
i++;
}
string formParams = string.Format("username={0}&password={1}<={2}&execution=e1s1&_eventId=submit&submit=ZALOGUJ", "login", "password", LT);
cookieHeader = req.Headers["Set-cookie"];
req.Headers.Add("Cookie", cookieHeader);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
string pageSource;
string getUrl = "https://cas.po.edu.pl/login";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
}
Ten kod zwraca InvalidOperationException: Nie można ustawić tej właściwości po rozpoczęciu zapisywania.
Strona to https://cas.po.edu.pl/login
Natomiast dane ciasteczka wyglądają tak:
username=abc&password=abc<=LT-5175-fkXdGbKY39LoWd6wqkhDlxKKgqmTcF&execution=e1s1&_eventId=submit&submit=ZALOGUJ
Według programu Fiddler.
Chciałbym się tego nauczyć.
To mój pierwszy post tutaj z góry dziękuję za pomoc.