Logowanie na Naszą Klasę - zrywa połączenie

0

Próba zalogowanie się na naszą klasę kończy się błędem jak poniżej. Co ważne, identyczny kod ze zmienioną zmienną logonUrl [i postData w odpowiednim formacie] loguje mnie na inne strony.
Myślałem, że może kwestia referera, więc go dodałem - nic to jednak nie zmieniło.

Błąd:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Kod:

        public bool Login() {
            Hashtable data = GUI.getData();
            string postData = "login=" + data["login"] + "&password=" + data["password"] + "&remember=1";
            string logonUrl = "http://nasza-klasa.pl/login";

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(logonUrl);
            byte[] bdata = System.Text.ASCIIEncoding.ASCII.GetBytes(postData);
            req.ContentLength = bdata.Length;
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";
            req.CookieContainer = new CookieContainer();
            req.Referer = "http://nasza-klasa.pl/";
            Stream reqStream = req.GetRequestStream();
            reqStream.Write(bdata, 0, bdata.Length);
            reqStream.Close();

            HttpWebResponse res = (HttpWebResponse)req.GetResponse(); //<-- błąd
            Stream resStream = res.GetResponseStream();
            StreamReader reader = new StreamReader(resStream);
            string responseData = reader.ReadToEnd();
....
0

A jak dasz user agenta Firefoxa, ie itp? Wszyskie parametry jak normalna przegladarka? Po ostatnich stratach na nk.pl mogi jakies zabezpieczenia tego typu dać..... Zaraz zobacze czy da sie w delphi

0

Ymm w delphi mi wyskakuje "HTTP/1.1 302 Found"
co oznacza

302 Found Znaleziono - żądany zasób jest chwilowo dostępny pod innym adresem a przyszłe odwołania do zasobu powinny być kierowane pod adres pierwotny

Może to coś pokieruje do usuniecia błedu
Pzdr

Ps
tamty u gory to ja

0

Zobacz tutaj.

0

Niestety, nadal nie pomaga.

Zgodnie z kodem w Pythonie najpierw posyłam zapytanie HEAD na stronę główną, to przechodzi ok, kolejny POST z danymi do logowania zachowuje się tak jak ostatnio.

Kod na razie toporny [redundancja parametrów], jak zacznie działać to to wyjmę do osobnej klasy/metody:

        public bool Login() {
            string homeUrl = "http://nasza-klasa.pl";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(homeUrl);
            req.Method = "HEAD";
            req.UserAgent = "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
            req.Referer = "http://nasza-klasa.pl/";
            req.CookieContainer = new CookieContainer();
            req.KeepAlive = true;
            req.Accept = "*/*";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();

            Hashtable data = GUI.getData();
            string postData = "login=" + data["login"] + "&password=" + data["password"] + "&remember=1";
            string logonUrl = "http://nasza-klasa.pl/login";

            req = (HttpWebRequest)WebRequest.Create(logonUrl);
            byte[] bdata = System.Text.ASCIIEncoding.ASCII.GetBytes(postData);
            req.ContentLength = bdata.Length;
            req.ContentType = "application/x-www-form-urlencoded";
            req.Method = "POST";

            req.UserAgent = "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
            req.Referer = "http://nasza-klasa.pl/";
            req.CookieContainer = new CookieContainer();
            req.KeepAlive = true;
            req.Accept = "*/*";

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

            res = (HttpWebResponse)req.GetResponse(); //<- błąd
...

I dodatkowo pytanie, dlaczego
res = (HttpWebResponse)req.GetResponse();
w obu przypadkach, niezależnie od strony, zapytania "zwiesza" program na jakieś 20..30 sekund? Dlaczego nie łączy się w ciągu paru sekund tak jak zwyczajna przeglądarka? W jaki sposób to można przyspieszyć?

0

...nie wiem czy zwróciłeś uwagę, ale działa po zmianie protokołu:
req.ProtocolVersion = HttpVersion.Version10;
(jak dla mnie, do zabawy, HTTP 1.0 jest wygodniejszy)

P.S.1 Pierwsze zapytanie w celu pobrania ciastka nie jest potrzebne.
P.S.2 Wszystkie dane POST muszą być w UTF-8.
P.S.3 Proponuję małe opóźnienia między połączeniami żeby nie dostać bana.
P.S.4 User-Agent nie ma żadnego wpływu.

[dopisane]

aha, pisze sobie w Delphi taki program NK Sender - Nasza Klasa Wysyłacz
więc mogę służyć źródłami lub radą ;)

0

Mam nadzieję, że nie dostanę spamu wysłanego z tego Twojego programiku :)

Pokombinowałem nieco i w końcu się udało - dzięki za podpowiedzi.
Logowanie to jedyny moment, kiedy mój program coś wysyła do strony, więc dalej sobie już powinienem poradzić ;)

Nadal został "problem" długiej zwiechy programu przy oczekiwaniu na reakcję serwera. Firefoksem w tym czasie odwiedzę profil i napiszę komentarz, więc to nie wina wolnego serwera czy łącza :-/

0

nasza-klasa zmieniła nazwę na nk może dlatego nie działa

1

user image

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