Orange token

0

Wymęczyłem kod do pobierania tokenu z bramki orange (w zamyśle token wczytany na komponent TWebBrowser)

// Komponenty: IdHTTP, WebBrowser

// zmienne globalne
var
  source : TStringStream;

// w zdarzeniu OnShow Formy
procedure TForm1.FormShow(Sender: TObject);
Begin
  source:=TStringStream.Create('');
  form1.IdHTTP1.Request.referer:='http://213.218.116.131';
  form1.IdHTTP1.Request.contenttype:='application/x-www-form-urlencoded';
  form1.IdHttp1.get('http://213.218.116.131', source);

  token := Copy(odbior.DataString, Pos('?id=', source.DataString)+ 4,100);
  token := Copy(token, 1, Pos('"', token)-1);

  url:=('http://213.218.116.131/rotate_token.aspx?token=' + token);
  WebBrowser1.Navigate(url);
End;

Niestety zamiast pobierać kod wyświetla zabezpieczenie (Figa z makiem coś tam tam), wiec wnioskuje że pobrany numer tokena ze strony jest zły ... pytanie jak pobrać właściwy numer tokena (znajduje się w ukrytym polu formularza token). wszystkim życzliwym za pomoc z góry dziękuje :)

Pozdrawiam.

0

Za szybko chciałbyś do tego dojść, niedokładnie przejrzałeś źródło strony Orange... Ten Twój niby token, którego pobierasz to nie jest żaden token. To jest ID które musisz przesłać wraz z adresem http://213.218.116.131/Default.aspx?id= i z odpowiedzi servera dostajesz ID tokena, więc dopiero teraz odwołujesz się do http://213.218.116.131/rotate_token.aspx?token= wraz z tym ostatnim ID.

0

Dość mocno odkopane.. Z góry przepraszam, ale właśnie jestem na etapie rozgryzania tokenu Orange. Jest w stanie ktoś rozwinąć myśl użytkownika z powyższej wypowiedzi?

0

No On wyjaśnił wszystko, ale z tego co widzę pod WireSharkiem to do wysłania SMS'a oprocz tokena
potrzebne jest hasło z obrazka, ale wiem że są aplikacje typu Eskimos, tylko ja dawno nie wysyłalem
z sieci wiadomości, bo nie miałem takiej potrzeby. Lecz musiałbyś WireSharkiem albo jakimś innym
programem, jeżeli nie wymaga on autoryzacji sprawdzić jakie wysyła bramka. Oryginalna śle POSTa
z taką zawartością jak poniżej, jak widać wymagane jst podanie hasła z obrazka, alę może się mylę.
token=55365014-9eca-429b-aab0-e07dad7fdfa7&RECIPIENT=NumerTelefonu&SENDER=olesio&SHORT_MESSAGE=Tresc+wiadomosci&MESSAGE_PREV=OD+olesio%2AOdpisz+zaraz%2A%3ATresc+wiadomosci&CHAR_COUNTER=znak%C3%B3w+16%2F419+%281+wiadomo%C5%9B%C4%87%29&CHK_RESP=on&RESPINFO=4&pass=packa

EDIT: teraz sprawdziłem, ostatni dostępny Eskimos również prosi o haslo z obrazka i bez tego nie da
się wyslać smsa. Nie mogąc spać napisałem coś co jest dostępne z gotowymi do kompilacji źródłemi
oraz exekiem. Korzysta poza Synapse i TGifImage ze standardowych modułów dostępnych w Delphi
i pod wersją 7 Personal kompiluje się bez problemów. Dołączylem wszystko co potrzeba, jak zwykle
to raczej robię. A sposób wykorzystania THttpSend w taki sposób, że jednocześnie obslugujemy get
oraz post - podsunał mi kiedyś Misiekd w kodzie programu, ktory też używał captchy do autoryzacji.
http://www.speedyshare.com/files/22735822/send_sms_to_orange.rar

0

Jesteś wielki! Mnie udało się znaleźć tylko .php - na jednym z serwisów, który właśnie generuje obrazek i token. Z tego co widzę Ty napisałeś jakby swój. Wobec tego mam do Ciebie WIELKĄ prośbę. Ogólnie rzecz biorąc nie za bardzo obracam się w tym języku - preferuje C++/C#. Potrzebuję tylko fragment, który właśnie wysyła te zapytania do serwera o obrazek i token - a dokładniej (bo przecież to już jakby mam - z tego gotowca .php) potrzebuje małej modyfikacji..

Chciałbym, że zamiast wielkiego obrazka ładowała się miniaturka:

http://213.218.116.131/rotate_token.aspx?mini=y&token=9f1603b5-9d0a-4911-8e2f-f93e8be187c7

Oczywiście, żebyś zobaczył token musisz go na nowo przeładować - to wiesz na pewno zresztą. Chodzi tutaj o parametr mini=y. Bardzo zależy mi, żeby otrzymać obrazek z tokenem właśnie w takiej postaci.

0

Leniuszek z Ciebie, rozumiem że można nie pisać w Delphi, ale pytasz o to w wątku,
ktory był w tym dziale zalożony i dotyczył tego języka to wypadało by coś samemu z
moim gotowcem pokombinować, dostałeś - według mnie - przejrzyste źródła, gdzie w
nazewnictwie użyty jest jak dla mnie zrozumiały język angielski. A i ja nie mialem o
tym pojęcia że da się wyświetlić sam tekst bez białej otoczki i info o sklepie Orange.
Teraz do posta dołaczona jest poprawiona wersja. Wystarczyło dopisać ten parametry,
każący pokazywać miniaturę do jednej stałej. Szkoda, że niektórzy tutaj są aż tak po
prostu leniwi i mało samodzielni ;( Co do samego pobierania obrazka to odbywa się
to w procedurze TGetImageThr.Execute; czyli wątku - wywoływanym po kliknięciu na
przycisk "Odśwież". Kod jest banalny. Wykorzystuje funkcję HttpAction, ktora używa
zmiennej FUrl dla podania adresu, FStrData do przesyłania danych metodą POST, no
a zwraca w SynHttp.Document obrazek, natomiast w zmiennej FPage zwraca zwykle
zawartość tekstową strony po pobraniu albo po wyslaniu danych metodą post. Aby z
kodu strony wydobyć sam token używana jest funkcja SimpleParse ktorej autorem w
oryginale jest Misiekd. A definicja tejże funkcji znajduje się w module a_main_func.

EDIT: dostałem prośbę na prywatną wiadomośc abym ponownie wrzucił kod. Także ów
prośbę spełniam dołączając spakowany kod do tego posta. Teraz i tak mniej więcej od
początku 2011 roku staram się spakowane kody dołączać do postów, a nie wrzucać ich
na hostingi, gdzie linki mogą szybko wygasnąć. Nie spodziewałem się, że po tylu moich
tutaj podpowiedziach kod jest jeszcze komuś potrzebny, ale widać że tak, więc oto on.

0

Faktycznie leń ze mnie. Wybacz. Dzięki za wielką pomoc. Teraz się będę musiał zastanawiać w sumie jak wysłać zapytanie w C#. Z tego co widzę to jest biblioteka curl, ale jak dla mnie czarna magia - nie ma jakiejś standardowej biblioteki, dzięki której mógłbym wysyłać zapytania?

0

W tematach z C nie pomoge, bo też ze mnie leń w kwstii uczenia się języków programowanie i nie tylko. I wszelkich C ni
cholery nie umiem, więc zero konkretów. Ale na pewno są jakieś biblioteki czy komponenty, obsługujące protokół HTTP.

0

Jako, że nie chce instalować programu Delphi ponieważ na codzień używam VS, mógłbym Cię prosić o wklejenie kodu zawierającego zapytania do serwera tutaj - http://wklej.to/? Można ustawić tam nawet kodowanie tekstu na dany język. Bardzo ułatwiłoby mi to sprawę. Z góry dziękuję!

0

Ech, wygodny jesteś. Przecież napisałem gdzie jest kod. Nie musisz mieć Delphi. Wystarczyło otworzyć pod jakimś
sensownym edytorem tekstu plik a_main_code.pas i skopiować sobie to co potrzebujesz. Dodatkowo jedną funkcję
SimpleParse z modułu a_main_func.pas. Ale co da Tobie wycinek kodu? Nie przetlumaczysz go idealnie na jakiś C
podobny język, bo i tak potrzebujesz czegoś co będzie Tobie pobierać do zmiennej tekstowej źródło strony - z pod
podanego adresu metodą GET i dodatkowo też wysyłać dane metodą POST, znajdującie się w zmiennej FStrData. I
poza tym w OnCreate wiasomo jest konstruktor dla THttpSend, do tego dochodzą zmienne w sekcji public oraz na
początku modułu głownego deklaracja typu THttpAction i kilka używanych zmiennych przez funkcję HttpAction, a
więc masz gotowca to albo skombinujesz sobie jakieś działające Delphi (moge podesłać Tobie, jak podasz e-maila
dane klucza do wersji Personal 7,.którą mozna jeszcze pobrać na kilku stronach) i pod nim analizujesz lub tak jak
pisalem pod jakimś edytorem sobie co potrzeba powycinasz. Jednak jak masz program w Delphi to albo samemu
poświecisz czas i przetlumaczysz sobie co potrzebujesz na C podobny plus jakieś biblioteki do protokołu HTTP lub
też będziesz pod Delphi sobie program zmieniał albo rozwijał. Ja odwalilem i tak calą robotę za Ciebie, wiesz nie
obraż się, ale dostałeś gotowca ktorego tylko wystarczy skompilować lub uruchomić i jeszcze teraz wymyślasz by
wycinać z tego kodu co chcesz - nie mam zamiaru tego robić ;/ Tutaj masz najważniejsze http://wklej.to/KvQW

0

Dzięki za pomoc. Po dłuższych kombinacjach zainstalowałem sobie Delphi. Mam teraz pełny wzgląd na Twój kod. Faktycznie jest bardzo przejżysty. Niestety przez to, że nie znam tego języka za dobrze rozumiem 50/50 co się tam dzieje. Wobec tego mam do Ciebie kilka pytań - bardzo miło byłoby gdybyś odpowiedział. Z tego co ja widzę to:

procedure TGetImageThr.Execute;
var
  GIF : TGifImage;
begin
  with MainForm do
  begin
    DisableControls;
    FUrl := Base_Url;
    HttpAction(acGet, False);
    FToken := SimpleParse('token=', '"', FPage);
    FUrl := Base_Url + Token_SugPage + FToken;
    HttpAction(acGet, False);
    SynHttp.Document.Position := 0;
    GIF := TGifImage.Create;
    try
      GIF.LoadFromStream(SynHttp.Document);
      CaptchaImage.Picture.Assign(GIF);
      ImageIsLoaded := True;
    except
      CaptchaImage.Picture := nil;
      GIF.Free;
      ImageIsLoaded := False;
    end;
    EnableControls;
    CaptchaEdit.Text := '';
    CaptchaEdit.OnChange(CaptchaEdit);
    if ImageIsLoaded = True then
    begin
      GIF.Free;
      FControl := CaptchaEdit;
      Synchronize(BringFocus);
    end;
  end;
end;

W tym fragmencie kryje się mój wymarzony cel. Do pustego stringa o nazwie FUrl przypisujemy zmienną Base_Url czyli http://sms.orange.pl. Potem do pustego stringa FToken przypisujemy sparsowaną wersję zmiennej FPage - wszystko byłoby dla mnie zrozumiałe gdyby nie to, że ta zmienna jest też pusta. Gdzie jest błąd w moim rozumowaniu?

Z góry dziękuję za pomoc.

0

FToken oraz FPage to na pewno nie są puste zmienne, bo inaczej kod nie pokazał by obrazka. Zawartość zmiennej FPage jest
zwracana w funkcji HttpAction, dokładnie pod jej koniec jest coś takiego jak poniżej. A funkcję opracował Misiekd z ów forum.
Ja dodałem tylko prostą zmienną typu wyliczeniowego typu THttpAction, która określa czy komponent SynHttp ma pobrać z
pod adresu FUrl dane metodą Get, czy wysłać do strony pod adresem FUrl to co jest z zmiennej FStrData merodą Post. Jest
to bardzo eleganckie, według mnie rozwiązanie, bo nie tworzymy na nowo obiektu typu THttpSend tylko cały czas wygodnie
pracujemy na jednym obiekcie, a rozwiązanie po drobnych przeróbkach pozwalało by nam zachować pobrane ciasteczka jak
i nagłówki, co jest ważne przy niektórych stronach gdzie należy wykonywać operacje będąc wcześniej zalogowanym. Ciutke
zboczyłem z tematu, takze masz poniższy kod. Wartość zmiennej FToken także nie jest pusta, bo ze zmiennej FPage, to co
potrzeba wyodrębnia funkcja SimpleParse, ktorej deklaracja oraz definicja znajduje się w module a_main_func. Teraz mam
nadzieję, że wszystko jasne. Jakby coś jeszcze bylo niejasne to pytaj. W sumie ten kod, to nic aż tak skomplikowanego :)

//...
      SetLength(FPage, Document.Size);
      Document.Read(PChar(FPage)^, Document.Size);
      if Encode then
      begin
        FPage := UTF8ToAnsi(FPage);
      end;
//...
0

Ja już po prostu nie wiem jakie mam zadać temu serwerowi pytanie. W poniższym wątku jest tez opisany mój problem:

http://4programmers.net/Forum/viewtopic.php?id=162405.

0

No z Curlem nie pomogę, jak nie odpowiada Tobie Delphi, które jest wedlug mnie i( nie tylko mnie) łatwiejsze na start
(o czym była - już nie tak dawno - dyskusja na forum). Masz działający kod w Delphi, massz do tego, jak pisaleś, już
zainstalowane środowisko to możesz robić z tym kodem co się Tobie podoba, ale jak wolisz mieć to napisane w C, to
jak uważasz. Ja nie jestem w stanie nic Tobie w tym temacie pomóc. Nie znam się niestety praktycznie w ogóle na C.
Zrssztą zobacz na moje posty, udzielam się tylko w tym dziale i w postach dortycząchyb Pascala lub Delphi w Newbie.

0

Doszedłem do tego. Dzięki za cierpliwość.

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