logowanie do Turbobit

0

Jedna strona jest bardzo dziwna z logowaniem. Czy ktoś z was ma tam konto (choćby darmowe?) i czas by sprawdzić w chwilę, czy potrafilibyście zalogować się przez delphi lub c++ z komponentem idHttp?

http://turbobit.net/

nawet program JDownloader nie potrafi się tam zalogować, choć dawniej potrafił bez problemu. Może wprowadzili na stronie jakieś utrudnienia. (nawet logowanie z na żywca skopiowanymy cookies z wireshark nie zadziałało mi, może coś źle robiłem). Także zwracam się do ekspertów :). Nie oczekuję żadnego kodu, co najwyżej porady jakiejś i tyle. I tylko dla tego serwisu, bo inne są normalniejsze.

1

Nie widzę żadnego problemu, a co do porady to nie wiem co radzić gdyż nie dałeś swojego kodu więc dam gotowca skoru już napisałem jak sprawdzałem.

const
  USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1';
  CONTENT_TYPE = 'application/x-www-form-urlencoded';
  BASE_URL = 'http://turbobit.net/';
  LOGIN_URL = 'user/login';
  //%0:s - email
  //%1:s - haslo
  LOGIN_FORM_DATA_FRMT = 'user[login]=%0:s&user[pass]=%1:s&user[Bsubmit]=Zaloguj+si%%C4%%99';
var
  sl: TStringList;
begin
  IdHTTP1.HandleRedirects:= True;
  IdHTTP1.Request.UserAgent:= USER_AGENT;
  IdHTTP1.Get(BASE_URL);
  IdHTTP1.Request.ContentType:= CONTENT_TYPE;
  IdHTTP1.Request.Referer:= BASE_URL;
  sl:= TStringList.Create;
  try
  sl.Add(Format(LOGIN_FORM_DATA_FRMT, ['[email protected]', 'pass']));
  Memo1.Text:= IdHTTP1.Post(BASE_URL + LOGIN_URL, sl);
  finally
  sl.Free;
  end;
end;
0

dziękuję za kod, ale i tak strona nie zwraca, że zalogowało mnie. Nadal dostaje się odpowiedź z oknami do wpisania loginu i hasła świadczących, że nie jest się zalogowanym (zresztą cookies trzeba wysłać i nawet jak cookies wysyłałem [może źle, ale wydaje mi się, że dobrze, bo w wireshark wysyłało niby dobrze]) to i tak było coś nie tak.
Także jak masz jeszcze jedną chwilę to spróbuj sprawdzić za co ponownie będę wdzięczny. I dziwi mnie też to, że JDownloader nie chce logować na tej stronie od jakiegoś czasu (przejrzałem nawet co jdownloader wysyła do strony).

Weź nawet dla przykładu odpal Wireshark i skopiuj cookie (długie jest) i później w programie wyślij to ciastko do strony, nie zwróci ci kodu, że jesteś zalogowany, tylko dostaniesz kod taki jak osoba niezalogowana (w notatniku sobie wklej ten otrzymany kod źródłowy strony i ctrl + f i rzuć okiem, czy login jest w kodzie lub wyraz do wylogowania)

0

@kAzek
ale piszesz, że działa ci z tym kodem, który napisałeś? Czy jeszcze dopisałeś jakiś dodatkowy?
Bo jeśli mówisz tylko o tym swoim kodzie tutaj to na milion % strona nie zwraca "strony", gdzie jest się zalogowanym. Sprawdzałem dokładnie. Nie wiem w jaki sposób ty sprawdzałeś (może ty tylko zobaczyłeś odpowiedź Set-Cookie i uznałeś, że to już informacja, że zalogowało cię, jeśli tak to jesteś w błędzie, bo możesz se podać fake dane, a i tak każe ci cookies ustawić).

0

Na 100% jestem zalogowany kod tylko ten co napisałem zero ustawień przy IdHTTP (tylko ten kod co napisałem z tym że hasło i login prawdziwy) nawet IdCookieMenager ani IdCompressorZLibEx nie używałem. Nie wiem może wersja Indy ma znaczenie u mnie 10.1.5 w każdym razie w kodzie strony po zalogowaniu jest email, nie ma formularza logowania zresztą wystarczy kod zapisać jako dokument .htm i ładnie wszystko widać że jestem zalogowany.

0
kAzek napisał(a):

Na 100% jestem zalogowany kod tylko ten co napisałem zero ustawień przy IdHTTP (tylko ten kod co napisałem z tym że hasło i login prawdziwy) nawet IdCookieMenager ani IdCompressorZLibEx nie używałem. Nie wiem może wersja Indy ma znaczenie u mnie 10.1.5 w każdym razie w kodzie strony po zalogowaniu jest email, nie ma formularza logowania zresztą wystarczy kod zapisać jako dokument .htm i ładnie wszystko widać że jestem zalogowany.

nie wiem jak to możliwe. Ja używam najnowszej wersji delphi (XE2). Na żywca nawet wklejałem kod twój i nic, ciągle jestem niezalogowany. Na 100% mail i PW dobry wpisałem.

O_o
Może ktoś z forum jeszcze kod przetestuje? (konto na TB szybko się zakłada, maila nie trzeba potwierdzać)

0

O_o
Dziękuję, że sprawdziłeś pod dwoma Delphi i poinformowałeś o tym. Miło z twojej strony.
Ale dlaczego dwie wersje idHTTP inne są? Teoretycznie powinny identyczne zapytania wysyłać... Nie pojmuję tego. Może jakiś ekspert się wypowie.
(wolałbym uniknąć logowania przez sockety lub w inny, dłuższy i nieprzyjemny sposób)

1

Coś z ciastkami było nie tak i trzeba je ręcznie obsługiwać. Podaje logowanie ale mam obawy (nie wiem na pewno bo nie sprawdzałem) że jak będziesz chciał cokolwiek zrobić na tej stronie to będziesz musiał ręcznie przewalać ciastka z Response do Request bo jakoś Indy na tej stronie tego za Ciebie nie zrobi. Nie wiem dlaczego pod Delphi 7 kod który wcześniej dałem działa a po XE2 nie ale jedno co było źle to ciasteczka nie były przekazywane a drugie to pod XE2 trzeba każde pole dodać osobno bo inaczej wysyłane było coś takiego:
Nazwa pola: user[login]
a wartość to cala reszta czyli: [email protected]&user[pass]=tester1&user[submit]=Zaloguj+si%%C4%%99';
Czyli po prostu nie rozdzieliło parametrów. Jedyne co mi przychodzi na myśl to że może to być wina Unicode.

const
  USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1';
  CONTENT_TYPE = 'application/x-www-form-urlencoded';
  ACCEPT_LANGUAGE = 'pl,en-us;q=0.7,en;q=0.3';
  BASE_URL = 'http://turbobit.net/';
  LOGIN_URL = 'user/login';
var
  sl: TStringList;
  cookie: string;
  i: Integer;
begin
  //IdHTTP1.Request.Accept:= 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  IdHTTP1.Request.AcceptLanguage:= ACCEPT_LANGUAGE; //tylko aby było pl

  IdHTTP1.HandleRedirects:= True;
  IdHTTP1.Request.UserAgent:= USER_AGENT;
  IdHTTP1.Get(BASE_URL);

  for i:=0 to IdHTTP1.Response.RawHeaders.Count - 1 do
  begin
    if Pos('Set-Cookie', IdHTTP1.Response.RawHeaders.Names[i]) = 1 then
    begin //trzeba bawic sie w reczna obsluge ciastek
      cookie:= IdHTTP1.Response.RawHeaders.Strings[i];
      Delete(cookie, 1, 11);  //obciac 'Set-Cookie: '
      IdHTTP1.Request.CustomHeaders.Add('Cookie: '+ cookie);
    end;
  end;

  IdHTTP1.Request.ContentType:= CONTENT_TYPE;
  IdHTTP1.Request.Referer:= BASE_URL;
  sl:= TStringList.Create;
  sl.Encoding.GetEncoding(65001); //utf-8
  try

  sl.Add('user[login][email protected]');
  sl.Add('user[pass]=tester1');
  sl.Add('user[submit]=Zaloguj się');

  Memo1.Text:= IdHTTP1.Post(BASE_URL + LOGIN_URL, sl);
  finally
  sl.Free;
  end;
end;
0

książęca mość, wielcem rad jestem za pomoc :)
Po prostu dziękuję, ale takie porządne dziękuję. Działa idealnie.
swoją drogą, to nauczyłeś mnie, że cookies można wysyłać razem z path expires itd, a wcześniej wysyłałem je tak jak firefox wysyłał, czyli Cookie: nazwa1=blabla; nazwa2=blabla; nazwa3=blabla
A teraz widzę, że w twoim sposobie cookies można słać w stylu
Cookie: nazwa1=blabla; expires=Sun, 12-Aug-2012 1746 GMT; path=/
Cookie: nazwa2=blabla; expires=Sun, 12-Aug-2012 1746 GMT; path=/
itd

Bardzo mnie uszczęśliwiłeś :). Dziękuję

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