MiastoPlusa wyslanie SMS

0

Mam problem z wyslaniem smsa, kozystajac z IdHTTP.Post.... Najgorsze jest to, ze niewiem do konca na jakiej zasadzie dziala POST w indy... Bylbym wdzieczny za poprawienie bledow.
O to zrodlo:

procedure TForm1.Button1Click(Sender: TObject);
var
odbior,nadanie:TStringStream;
Begin
  odbior:=TStringStream.Create('');
  nadanie:=TStringStream.Create('');
  nadanie.WriteString('login='+'moj_login'+'&haslo='+'moje_haslo');
  IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
  try
  IdHTTP1.Post('http://www.miastoplusa.pl/auth/LoginCitizen.do', nadanie, odbior);
  if pos('Zalogowany jako',odbior.DataString)=0 then ShowMessage('Zalogowano!') else begin ShowMessage('Niezalogowano!');exit;end;
      nadanie.free;
      odbior.free;
  except
  exit;
end;
end;



procedure TForm1.Button2Click(Sender: TObject);
var
nadanie2,odbior2:TStringStream;
begin
nadanie2:= TStringStream.Create('');
odbior2:= TStringStream.Create('');
IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
nadanie2.WriteString('phoneNumber=607xxxxxx&smsType=10&userId=0
&groupId=0&message=test&preview=MiastoPlusa,+n4p1:+test
&notifyCode=0&validity=48&sendDay=-1&sendHour=0&sendMin=0
&flashMessage=0&templateCategory=0&ArchiveMessage=1
&targetURL=%2Fsms%2Fsend_sms.jsp');
try
idHTTP1.Post('http://www.miastoplusa.pl/sms/SendSMS2.do', nadanie2, odbior2);
if pos('przekazany',odbior2.DataString)=0 then ShowMessage('Wyslano SMS!') else begin ShowMessage('Niewyslano SMS!');exit;end;
      nadanie2.free;
      odbior2.free;
  except
  exit;
end;
end;

// proszę, róbcie złamania linii, bo inaczej okropnie strone rozwala.

0

Tutaj masz troszkę uproszczony kod (bez logowania na bramkę Miasta Plusa, wysłanie przez bramkę smsową Plusa):

var
odbior, nadanie: TStringStream;
begin
odbior:=TStringStream.Create('');
nadanie:=TStringStream.Create('');
nadanie.WriteString('tprefix='+copy(Numer.Text,0,3)+'&numer='
+copy(Numer.Text,4,6)+'&odkogo='+Nadawca.Text+'&dzien='
+Dzien.Text+'&godz='+Czas.Text+'&min='+Czas.Text+'&tekst='+Tekst.text);
IdHTTP1.Request.contenttype:='application/x-www-form-urlencoded';
try
IdHTTP1.Post('http://www.text.plusgsm.pl/sms/sendsms.php',nadanie,odbior);
except on Exception do ShowMessage ('Problemy z połączeniem!!!');
end;
if pos('Twoja wiadomość została wysłana',odbior.DataString)=0 then
ShowMessage('SMS DOSTARCZONY')
else
ShowMessage('SMS NIE DOSZEDŁ!');
nadanie.Free;
odbior.Free;
IdHTTP1.Disconnect;
end;

Pozdrawiam ;)

0

na tym kodzie wlasnie bazowalem, przeanalizuje go jeszcze raz i zobacze czy gdzies sie nie walnolem...
Jeszcze jedno moze mi ktos wytlumaczyc jak zamienic adres:
http://www.miastoplusa.pl/sms/SendSMS2.do?phoneNumber=607xxxxxx&smsType=10&userId=0&groupId=0&message=test&preview=test%0D%0A&notifyCode=0&validity=48&sendDay=-1&sendHour=0&sendMin=0&flashMessage=0&templateCategory=0&ArchiveMessage=1&targetURL=%2Fsms%2Fsend_sms.jsp
na taki, ktory bedzie wysylal komponent idHTTP metoda post? Nigdzie nie moglem znalezc dokumentacji na ten teamt, a przegladanie zrodel pomoglo tyle ile jest napisane w pierwszym moim poscie (patrz zrodla). Bede ogromnie wdzieczny za wszelkie informacje.
Pozdrawiam.

0

Funkcja konwerujaca tekst:

    function ConvertText(const Text:string):string;
  begin
    Result:=StringReplace(Text,'%','%25',[rfReplaceAll]);
    Result:=StringReplace(Result,'#','%23',[rfReplaceAll]);
    Result:=StringReplace(Result,'&','%26',[rfReplaceAll]);
    Result:=StringReplace(Result,'+','%2B',[rfReplaceAll]);
    Result:=StringReplace(Result,#10,'%0A',[rfReplaceAll]);
    Result:=StringReplace(Result,#13,'%0D',[rfReplaceAll]);
  end;

oraz:

procedure miastoplusa;
var
login,passwd:string;  
begin
login:='login';
passwd:='Passwd';
  nadanie:=TStringStream.Create('login='+login+'&password='+passwd);
  odbior:=TStringStream.Create('');
  try
    form1.send_sms.Get('http://www.miastoplusa.pl/minimal/frameset.jsp');
    form1.send_sms.Request.Referer:='http://www.miastoplusa.pl/minimal/login.jsp';
    form1.send_sms.Request.ContentType:='application/x-www-form-urlencoded';
    form1.send_sms.Post('http://www.miastoplusa.pl/auth/LoginCitizen.do',nadanie,odbior);
        {Tutaj będziesz sprawdzał czy jest dobre hasło}
    nadanie.Free;
    odbior.Free;
    nadanie:=TStringStream.Create('phoneNumber='+form1.numer.Text+'&message='+
ConvertText(form1.tresc.Lines.Text)+'&userId=0&groupId=
0&smsType=10&notifyCode=0&validity=48&sendDay=
-1&sendHour=0&sendMin=0&templateCategory=0&templateText=1&targetURL=%2Fsms%2Fsend_sms.jsp');
    odbior:=TStringStream.Create('');
        form1.send_sms.Post('http://www.miastoplusa.pl/sms/SendSMS2.do',nadanie,odbior);
 form1.send_sms.Get('http://www.miastoplusa.pl/sms/SendSMS2.do',odbior);
if pos(' SMS przekazany do wysłania.',odbior.DataString)=0 then begin
form1.tresc.text:='';
form1.status.Caption:='SMS przekazany do wysłania.';
end;
 {tutaj potwierdzenia}
  except
    on Exception do begin
    form1.status.Caption:='';
    MessageDlg('Źle działająca bramka!',mtError,[mbOk],0);
  end;
  end;
  Send.Free;
  Recv.Free;

            end;

Masz tu procedure dzialajaca do miasto Plusa. Sorki zalamanie linni ale lepiej wyglada na forum.

0

Dzieki wielkie! Jak tylko znajde czas to przeanalizuje.

0

Logowanie oraz wysylanie dziala, wszystko ok, ale mam jeszcze jeden maly problem... Podczas logowania i wysylania cala aplikacja tak jakby "zamarza" i nic nie mozna zrobic, do momentu w ktorym sie zaloguje albo wysle smsa... Jest jakas rada na to?

0

To może użyj IdAntiFreeze...

0

Wlasnie u mnie tez tak jest :/ Z kazda strona na ktora sie loguje. Nie wiem jak to ominac Moze ma ktos linka do tego komponentu??

0

Przecież IdAntiFreeze jest z Indy 8-O
user image

0
-=JaCkObS=- napisał(a)

To może użyj IdAntiFreeze...

Moim zdaniem lepiej zrobić to w wątku, do tworzenia watku można użyć TIdThreadComponent

0
-=JaCkObS=- napisał(a)

Przecież IdAntiFreeze jest z Indy 8-O
user image

Sorki ale po 2 egzaminach troche nie mysle :) Jak wroce do domu sprawdze czy przy pomocy tego komponentu da sie to zrobic :). Wlasnie jestem w trakcie tworzenia programiku ktory loguje sie na www.orange.pl i pobiera z orange online dane na temat konta, ile zlotych zostalo, jakie pakiety i tak dalej... Wlasnie podczas logowania program jakby "stawal" pobierajac za kazdym razem dane :/

0

Dziala z IdAntiFreeze, ale nadal forma troche sie "muli" mimo to nie przeszkadza mi to :). Dzieki za pomoc. Co do TIdThreadComponent to moze kiedys bede mial tyle wiedzy ze sie tym pobawie.

0

Probowalem zrobic na podstawie wczesniejszych przykladow wlasna bramke do plusa i niestety bez przerwy podczas logowania(jak wyrzuce try) podaje mi bląd:

HTTP/1.1 302 Moved Temporarily

Moj kod wyglada nastepująco:

procedure Tform1.miastoplusa;
var
login,passwd:string;
odbior1,nadanie1: TStringStream;
odbior2,nadanie2: TStringStream;
begin

login:='log';
passwd:='pas';
  nadanie1:=TStringStream.Create('login='+login+'&password='+passwd);
  odbior1:=TStringStream.Create('');
  try
IdHTTP1.Get('http://www.miastoplusa.pl/minimal/frameset.jsp');

IdHTTP1.Request.Referer:='http://www.miastoplusa.pl/minimal/login.jsp';

IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';

IdHTTP1.Post('http://www.miastoplusa.pl/auth/LoginCitizen.do',nadanie1,odbior1);

if pos('Miasto Plusa > Logowanie',odbior1.DataString)=0 then begin
widok2.Caption:='SMS przekazany do wysłania.';
end else widok2.Caption:='SMS nie wysłany.';

   nadanie1.Free;
    odbior1.Free;
    nadanie2:=TStringStream.Create('phoneNumber='+numer.text+'&message='
+tekst.Text+'&userId=0&groupId=0&smsType=20&notifyCode=0&validity=48
&sendDay=-1&sendHour=0&sendMin=0&templateCategory=0&templateText=1
&targetURL=%2Fsms%2Fsend_sms.jsp');
    odbior2:=TStringStream.Create('');


IdHTTP1.Post('http://www.miastoplusa.pl/sms/SendSMS2.do',nadanie2,odbior2);

IdHTTP1.Get('http://www.miastoplusa.pl/sms/SendSMS2.do',odbior2);
if pos('SMS przekazany do wysłania.',odbior2.DataString)<>0 then begin
tekst.text:='';
widok1.Caption:='Zalogowany.';
end else widok1.Caption:='Nie zalogowany.';
  except
    on Exception do begin
    MessageDlg('Źle działająca bramka!',mtError,[mbOk],0);
  end;
  end;
  nadanie2.Free;
    odbior2.Free;

            end;

Problem tkwi w lini

IdHTTP1.Post('http://www.miastoplusa.pl/auth/LoginCitizen.do',nadanie1,odbior1);

Jezeli ja wyrzuce to błąd nie wyskakuje,ale nie wysyła, natomiast jezeli ona wystepuje wyskakuje owy błąd.
Nie mam zielonego pojęcia gdzie moze tkwic problem. Prosze o pomoc.

0

to oznacza ze znowu trzeba uzyc sniffera i zobaczyc czy miasto plusa nie zmienilo cos na swej stronie.

0

Ustaw w komponencie IdHTTP aby akceptowało przekierowania. Nie pamietam jak się ta opcja nazywa niestety - AllowRedirects może?

0

Wez zobacz po zalogowaniu jaki masz kod html na bramce plusa i poszukaj czegos szczegolnego a potem wpisz cos takiego:

if pos('tu wpiszesz ten wyszukiwany tekst',get(redirecturl))<>0 then begin
form1.StatusBar1.Panels[0].Text:='Jestes zalogowany';
end
else begin
form1.StatusBar1.Panels[0].Text:='Nie jestes zalogowany';
end;

i w idhttp1 w onredirect
wstaw cos takiego:

redirectURL:=dest;

To jest zrobione na przykladzie logowania do MBoxa i nie sprawdzane na miasto plusa oraz jest to tylko przyklad :) .

0

Problem sie rozwiazał dzieki ustawieniu HandleRedirects na true(dzięki KTOS miałes rację )
WEBSTER twoj sposób wypróbuje jak mi odblokuja konto bo przed chwila miastoplusa zablokowalo mi konto.Chyba zbyd duza ilosc nieudanych prob logowania:P
Pozdrawiam i dzieki Wam za pomoc!!!!!

0

Witam, potrzebuję zrobić program który będzie mi wysyłał smsy z bazy danych którą już oprogramowałem, poniżej kod który użyłem z tego forum ale nie działa coś...

Kod:

procedure TForm1.ButtonSendClick(Sender: TObject);
var
  lvLogin, lvPasswd: string;
  lvOdbior, lvNadanie: TStringStream;
begin
  lvLogin:='48508915756';
  lvPasswd:='awzy99';

  lvNadanie:=TStringStream.Create('login='+lvLogin+'&password='+lvPasswd);
  lvOdbior:=TStringStream.Create('');
    try
      IdHTTP1.Get('http://www.eraomnix.pl/sso2/omnix_iframe/login.jsp');
      IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
      IdHTTP1.Post('http://www.eraomnix.pl/sso2/omnix_iframe/login.jsp',lvNadanie, lvOdbior);
          {Tutaj będziesz sprawdzał czy jest dobre hasło}
      lvNadanie.Free;
      lvOdbior.Free;
      lvNadanie:=TStringStream.Create('phoneNumber='+numer.Text+'&message='+
        ConvertText(Memo1.Lines.Text)+'&userId=0&groupId=0&smsType=10&notifyCode=0&validity=48&sendDay=-1&sendHour=0&sendMin=0&templateCategory=0&templateText=1&targetURL=%2Fsms%2Fsend_sms.jsp');

  lvOdbior:=TStringStream.Create('');
  IdHTTP1.Post('http://www.eraomnix.pl/msg/user/omnix/welcome.do?mg_id=23866', lvNadanie, lvOdbior);
  IdHTTP1.Get('http://www.eraomnix.pl/msg/user/omnix/welcome.do?mg_id=23866', lvOdbior);
  if pos(' SMS przekazany do wysłania.', lvOdbior.DataString)=0 then
    begin
      Memo1.text:='';
      Status.Caption:='SMS przekazany do wysłania.';
    end;
 {tutaj potwierdzenia}
    except
      on E: Exception do
        begin
          Status.Caption := '';
          MessageDlg(E.Message, mtError, [mbOk], 0);
        end;
    end;
  lvNadanie.Free;
  lvOdbior.Free;
end;

Wyskakuje mi błąd:
Error: HTTP/1.1 302 Moved Temporarily

Z góry dziękuję za pomoc.

0

Wyskakuje mi błąd:
Error: HTTP/1.1 302 Moved Temporarily

trzeba ustawic redirecta. nie pamietam dokladnie.

0

No tak zgadza się :) Więc tak, niby się loguje na stronę ale jak mogę to sprawdzić?

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