вторник, 9 августа 2011 г.

Delphi - отправляем СМС

В этой статье я расскажу как написать программу на Delphi 2010 которая будет отправлять СМС.



Начнём...

Кидаем на форму:

1. 2 кнопки (вкладка Standart)
2. Поле ввода типа Memo (вкладка Standart)
3. 3 поля ввода (вкладка Standart)
4. Image (вкладка Additional)
5. IdHTTP (вкладка IndyClients)
6. IdSSLIOhandlerSocketOpenSSL (Вкладка Indy I/O Handlers)

Расположим все компоненты примерно так:


Переходим в IdHTTP1 находим свойство IOHandler и присваиваем значение IdSSLIOhandlerSocketOpenSSL

Добавим глобальную переменную типа STRING:

var
Form1: TForm1;
codecap:string;

Теперь кликаем по кнопке "Получить каптчу" и вписываем такой вот код:

var FS:TFileStream; s, key:string;


//получаем параметры каптчи
 s:=IdHttp1.Get('https://www.beeline.ru/sms/index.wbp');
 key:=Copy(s,Pos('afcode" value="',s)+1,Length(s)); //Копируем всё что после
 key:=Copy(key,1,Pos('">',key)-1); //Копируем всё что до
 Delete(key, 1, 14); //удаляем не нужное
 codecap:=key; //копируем параметры каптчи в глобальную переменную!
//получение каптчи
 IdHTTP1.Request.Referer:='https://www.beeline.ru/sms/index.wbp';
 FS:=TFileStream.Create('vans.gif',FMCreate);
 IdHTTP1.Get('https://www.beeline.ru/mamimg.aspx', FS);
 FS.Free;
 Image1.Picture.LoadFromFile('vans.gif');


В USES надо добавить:  GifImg

Запускаем программу и видим что каптча успешно загружается.

Переходим к отправке...

Нам надо узнать какие запросы передаёт сайт, для этого я использую программу HttpAnalyzer.
Скрин передаваемых параметров:
 



 Передаётся всё на https://www.beeline.ru/sms/index.wbp

Переходим к коду отправки СМС:

var Data:TStringList; s:string;

Data:=TStringList.Create;
 Data.Add('send=');
 Data.Add('smstext='+Memo1.Text); //Текст СМС сообщения
 Data.Add('afcode='+codecap); // Параметры каптчи
 Data.Add('smstoprefix='+Edit1.Text); //Префикс 940, 960, 970 и т.п.
 Data.Add('smsto='+Edit2.Text); // номер
 Data.Add('dirtysmstext='+Memo1.Text); //Текст СМС сообщения
 Data.Add('confirm_key=');
 Data.Add('confirmcode='+Edit3.Text); //Код с картинки
 Data.Add('x=33');
 Data.Add('y=11');

 S:=IdHTTP1.Post('https://www.beeline.ru/sms/index.wbp', Data);
 S:=Utf8ToAnsi(S);
 if Pos('Сообщение помещено в очередь отправки', S)<>0 then
  ShowMessage('Сообщение отправлено!')
 else
  ShowMessage('Ошибка отправки!');


Вот и всё! Думаю объяснил понятно, но если кто то чего то не понял задавайте вопросы, с удовольствием отвечу на все.

Данный способ подходит для написания авторегеров и разного рода накрутчиков.

P.S. Исходники выкладывать не буду т.к. никто не будет читать что я писал =)

14 комментариев:

  1. я увлекаюсь программированием в Delfi и Lazarus))))все норм работает))

    ОтветитьУдалить
  2. Владислав, Вы наверное хотели сказать Delphi, а не Delfi. :D
    Сразу видно, что человек очень увлекается программированием.)

    ОтветитьУдалить
  3. Я все читал, но нихера не понял:( Выложи исходники

    ОтветитьУдалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. Все работает, программа всегда пишет "Ошибка отправки", но сообщение доходит. Как это исправить?

      Удалить
    2. Изменить условие проверки.

      Удалить
    3. Другого ответа я и не ожидал..

      Удалить
  5. А можно исходник выложить, не получается, делаю как написано но вышибает ошибку.

    ОтветитьУдалить
  6. У тебя VANS версия Delphi какая?

    ОтветитьУдалить
  7. ничего не понял... выложи ванс скрины хотябы как у тебя это всё выглядит.. непонятно ничего

    ОтветитьУдалить
  8. Vans можно сделать для http://www.orange.md/? а то у меня не получается

    ОтветитьУдалить
  9. Не получилось:С

    ОтветитьУдалить
  10. Вопрос не по теме, какие ЯП посоветуешь выучить?

    ОтветитьУдалить