Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Отправка смс


Автор: ishimcity 1.10.2007, 19:03
Люди добрые подскажите в чем проблема.

немогу отправить смс через сайт ...привожу код......
Код

procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
  sl: TStringList;
 
 begin

   sl := TStringList.Create;
      try
        sl.Add('passwd=' + cod.Text );
        sl.Add('&phone_number=' + '7904xxxxxxx');
        sl.Add('&msg=' + '1234567890');            
        sl.Add('&translit=0');
        sl.Add('&mod=' + lmod);
        sl.Add('&cook=' + ris1);                                        'все данные собраны'



          IdHTTP1.AllowCookies:= True;
             IdHTTP1.HandleRedirects:= True;
           IdHTTP1.Request.UserAgent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';
         idHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
     IdHttp1.Post('http://wap.erobum.ru/sms/utel.php?do=send', sl);                        'ЗАСЫЛАЕМ'
      finally
        sl.Free;
      end;

' И нечего нет'


end;

procedure TForm1.FormCreate(Sender: TObject);  'При загрузке получаю картинку и кук'
const
C_Url='tmp/';
C_Cod='name="cook" value="';
var
  txt,ris,txt1,ss,lres: string;
  sPos, fPos,spos1,fpos1,lpos,lpos2: Integer;
  ltxt,ltxt1: Integer;
  lStream: TMemoryStream;
  jpg: TJPEGImage;
begin
txt := IdHTTP1.Get('http://wap.erobum.ru/sms/utel.php');      'Ищим картинку'
  sPos := Pos(C_Url, txt);
  if sPos > 0 then
    begin
      ltxt := Length(C_Url);
      Inc(sPos, ltxt);
      fPos := sPos;
      while (fPos <= ltxt) and (txt[sPos] <> '"')
        do Inc(fPos);
      ris:=Copy(txt, sPos, 14);

      if ris <> '' then
        begin
          lStream := TMemoryStream.Create;
          jpg := TJPEGImage.Create;
          try
            IdHTTP1.Get(C_Url + ris , lStream);
            lStream.Position := 0;
            jpg.LoadFromStream(lStream);
            Image1.Picture.Bitmap.Assign(jpg);            'выводим картинку'
          finally
            jpg.Free;
            lStream.Free;

    end;
           txt1 := IdHTTP2.Get('http://wap.erobum.ru/sms/utel.php');   'ищим кук'
  sPos1 := Pos(C_Cod, txt1);
  if sPos > 0 then
    begin
      ltxt1 := Length(C_Cod);
      Inc(sPos1, ltxt1);
      fPos1 := sPos1;
      while (fPos1 <= ltxt1) and (txt1[sPos1] <> '"')
        do Inc(fPos1);
      ris1:=Copy(txt1, sPos1, 32);
         lPos := Pos('<input type="hidden" name="mod" value="', lRes);
  if lPos > 0 then
    begin
      Inc(lPos, 39);
      lPos2 := lPos;
      while lRes[lPos2] <> '"' do Inc(lPos2);
      if lPos2 > lPos then
        lmod := Copy(lRes, lPos, lPos2 - lPos);                   'есть кук'
    end;
    end;
          end;
        end;
    end;




end.


Автор: aktuba 2.10.2007, 14:18
Вот эта часть кода вообще не верная:
Код

sPos1 := Pos(C_Cod, txt1);
  if sPos > 0 then // здесь должно быть if sPos1 > 0 then
    begin
      ltxt1 := Length(C_Cod);
      Inc(sPos1, ltxt1);
      fPos1 := sPos1;
      while (fPos1 <= ltxt1) and (txt1[sPos1] <> '"') // ЭТО КАК??? "пока позиция в тексте меньше длины заготовки????
        do Inc(fPos1);
      ris1:=Copy(txt1, sPos1, 32); // ну и далее...
         lPos := Pos('<input type="hidden" name="mod" value="', lRes);
  if lPos > 0 then
    begin
      Inc(lPos, 39);
      lPos2 := lPos;
      while lRes[lPos2] <> '"' do Inc(lPos2);
      if lPos2 > lPos then
        lmod := Copy(lRes, lPos, lPos2 - lPos);                   'есть кук'
    end;
    end;
          end;
        end;
    end;

Автор: ppc 6.10.2007, 13:54
Могу поделиться своим вариантом

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, wininet, IdAntiFreezeBase, IdAntiFreeze,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  ExtCtrls, JPEG, Buttons;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    GroupBox1: TGroupBox;
    Memo1: TMemo;
    Label2: TLabel;
    GroupBox2: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    GroupBox3: TGroupBox;
    IdHTTP1: TIdHTTP;
    IdAntiFreeze1: TIdAntiFreeze;
    Image1: TImage;
    Edit2: TEdit;
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    Label3: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure RadioButton3Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  chars,done,br:integer;

implementation

{$R *.dfm}

procedure check;
begin
br := 0;
if form1.ComboBox1.Text='' then
begin
showmessage('Выбирите оператора!');
br := 1;
exit;
end;
if form1.Edit1.Text='' then
begin
showmessage('Введите номер телефона!');
br := 1;
exit;
end;
if form1.Edit2.Text='' then
begin
showmessage('Введите код!');
br := 1;
exit;
end;

end;


function GetInetFile
(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;
begin
Application.ProcessMessages;
 Result:=False;
 sAppName := ExtractFileName(Application.ExeName);
 hSession := InternetOpen(PChar(sAppName),
                INTERNET_OPEN_TYPE_PRECONFIG,
               nil, nil, 0);
 try
  hURL := InternetOpenURL(hSession,
            PChar(fileURL),
            nil,0,0,0);
  try
   AssignFile(f, FileName);
   Rewrite(f,1);
   repeat
    InternetReadFile(hURL, @Buffer,
                     SizeOf(Buffer), BufferLen);
    BlockWrite(f, Buffer, BufferLen)
   until BufferLen = 0;
   CloseFile(f);
   Result:=True;
  finally
   InternetCloseHandle(hURL)
  end
 finally
  InternetCloseHandle(hSession)
 end
end;


procedure getpicture;
var
pos1,pos2,pos3:integer;
img,get:string;
begin
form1.Panel1.Visible := true;
Application.ProcessMessages;
form1.IdAntiFreeze1.Process;
try
get := form1.IdHTTP1.Get('http://beesms.beeline.ua/');
except
Application.MessageBox('Не удается подключиться к Beeline, проверте подключение к интернету','Error',mb_OK);
form1.Close;
end;
pos1 := pos('SRC="..',get);
delete(get,1,pos1+7);
pos2 := pos('"',get);
img := 'http://beesms.beeline.ua/' + copy(get,1,pos2-1);
try
GetInetFile(img,'code.jpg');
except
Application.MessageBox('Не удается скачать проверочный код, проверте подключение к интернету','Error',mb_OK);
end;
form1.Image1.Picture.LoadFromFile('code.jpg');
form1.Panel1.Visible := false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
done := 0;
chars := 119;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
if done=0 then
begin
getpicture;
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
getpicture;
end;

procedure TForm1.RadioButton3Click(Sender: TObject);
begin
if radiobutton3.Checked=true then
begin
chars := 29;
label2.Caption := 'Осталось символов ' + inttostr(chars - length(memo1.Text));
end;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
if radiobutton2.Checked=true then
begin
chars := 119;
label2.Caption := 'Осталось символов ' + inttostr(chars - length(memo1.Text));
end;
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
if radiobutton1.Checked=true then
begin
chars := 119;
label2.Caption := 'Осталось символов ' + inttostr(chars - length(memo1.Text));
end;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
label2.Caption := 'Осталось символов ' + inttostr(chars - length(memo1.Text));
memo1.MaxLength := chars;
end;


procedure sms;
var
posturl,r:string;
data:TStrings;
begin

check;
if br=1 then
begin
exit;
end;

//
posturl := 'http://beesms.beeline.ua/';
//

try
data := TStringList.Create;
data.Clear;
except
data.Clear;
end;

data.Add('dlina='+inttostr(chars));
if form1.RadioButton1.Checked=true then
begin
data.Add('lg=latukr');
data.Add('lang=latukr');
end;
if form1.RadioButton2.Checked=true then
begin
data.Add('lg=latrus');
data.Add('lang=latrus');
end;
if form1.RadioButton3.Checked=true then
begin
data.Add('lg=rus');
data.Add('lang=rus');
end;
data.Add('num_pref=' + form1.ComboBox1.Text);
data.Add('phone_num=' + trim(form1.Edit1.Text));
data.Add('text_message=' + form1.Memo1.Text);
data.Add('code_form=' + form1.Edit2.Text);
data.Add('op=send_sms');


try
r := form1.IdHTTP1.Post(posturl,data);
except
showmessage('Не удалось отправить сообщение!');
exit;
end;

if pos('Сообщение отправлено',r)<>0 then
begin
showmessage('Сообщение успешно отправлено');
end
else
begin
showmessage('Сообщение не отправлено!');
end;

//last end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
sms;
end;

end.


Автор: ishimcity 6.10.2007, 20:55
Да спасибо. Но а как бысть с МТС там такие коды защиты.мне делфя сообщяет что строка большее 255 символов и пишет ошибку,хотя код правильный....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)