Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка смс, с сайта оператора 
:(
    Опции темы
XbiT
Дата 3.7.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



Пишу программу которая должна отправлять смс с сайта www.kyivstar.net/ru/sms/form/
Возникла проблемма с получением антиспам кода. Вместо полной картинки отображаеться лишь 
Код

‰PNG


Вот собственно код на дельфи:
Код

const nl:string = #10;
procedure TForm1.Button1Click(Sender: TObject);
var
  sock : TSocket;
  host : TSockAddr;
  WSAData:TWSAData;

function sock_send(s : string) : boolean;
Var
  i : longint;
begin
  sock_send := true;
  for i := 1 to length(s) do
    if send(sock, s[i], 1, 0) = SOCKET_ERROR then
      begin
        sock_send := false;
        break;
      end;
end;
function sock_recv(Var s : string) : integer;
Var
  i, recvsize, recvsum: integer;
  buf : array [1..255] of char;
begin
  s := '';
  recvsum := 0; recvsize := 0;
  repeat
    recvsize := recv(sock, buf, sizeof(buf), 0);
    for i := 1 to recvsize do
      s := s + buf[i];
    inc(recvsum, recvsize);
  until recvsize = 0;
  sock_recv := recvsum;
end;

Var
  s, code : string;
  t : integer;
begin
  WSAStartUp($101,WSAData);
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if sock = INVALID_SOCKET then
    begin
      memo1.Lines.Add('INVALID_SOCKET error');
      exit;
    end;

  host.sin_family := AF_INET;
  host.sin_port := htons(80);
  host.sin_addr.S_addr := inet_addr('193.41.60.108');

  //коннектимся к серверу
  if connect(sock, host, SizeOf(host)) > 0 then
    begin
      memo1.Lines.Add('connect() error');
      exit;
    end;

  //запрос для получения страницы с формой
  s := 'GET /ru/sms/form/ HTTP/1.1'+nl+'Host: www.kyivstar.net'+nl+'Accept: */*'+nl+nl;

 //отправляем запрос
  if not sock_send(s) then
    begin
      memo1.Lines.Add('sock_send() error');
      exit;
    end;

  t := sock_recv(s);
  memo1.Lines.Add('Получено байт: ' + inttostr(t));
  code := copy(s, pos('code=', s)+5, 4); //берем код из кукиса

  memo1.Lines.Add('Код: '+code);
  memo1.Lines.Add(s);

  //запрос для получения картинки с кодом
  s := 'GET /sms_code_image.gif HTTP/1.1'+nl+'Host: www.kyivstar.net'+nl+'Accept: */*'+nl+'Referer: http://www.kyivstar.net/ru/sms/form/'+nl+'Cookie: code='+code+nl+nl;

  closesocket(sock);
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if sock = INVALID_SOCKET then
    begin
      memo1.Lines.Add('INVALID_SOCKET error');
      exit;
    end;

  //коннектимся к серверу
  if connect(sock, host, SizeOf(host)) > 0 then
    begin
      memo1.Lines.Add('connect() error');
      exit;
    end;

  memo1.Lines.Add(s);
  if not sock_send(s) then
    begin
      memo1.Lines.Add('sock_send() error');
      exit;
    end;

  t := sock_recv(s);
  memo1.Lines.Add('Получено байт: ' + inttostr(t));
  memo1.Lines.Add(s);

  closesocket(sock);
  WSACleanup();
end;

прошу извинить за немного кривой код smile 
PM MAIL   Вверх
_hunter
Дата 4.7.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



отображается где? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
dumb
Дата 4.7.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 5
Всего: 158



товарищ! качая PNG-image, не забудь использовать соответствующий компонент для его отображения. memo таки не панацея. smile 
PM MAIL   Вверх
XbiT
Дата 4.7.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



_hunter, в memo

dumb, но всё таки в memo ведь должен отображаться "исходник" картинки?

Может кто-нибуть подскажет как правильно получать картинку с кодом? 
PM MAIL   Вверх
_hunter
Дата 4.7.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



исходник там отображается, но только до пераого #0.
можно просто позаменять все #0 в строке на пробелы 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
XbiT
Дата 4.7.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



упс, а точно до первого #0.

_hunter, огромное спасибо!  smile  
PM MAIL   Вверх
XbiT
Дата 4.7.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



И на этом проблемы не закончились smile
Почему то не хочет отправляться смс smile
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  sock : TSocket;
  host : TSockAddr;
  WSAData:TWSAData;

function sock_send(s : string) : boolean;
Var
  i : longint;
begin
  sock_send := true;
  for i := 1 to length(s) do
    if send(sock, s[i], 1, 0) = SOCKET_ERROR then
      begin
        sock_send := false;
        break;
      end;
end;
function sock_recv(Var s : string) : integer;
Var
  i, recvsize, recvsum: integer;
  buf : array [1..255] of char;
begin
  s := '';
  recvsum := 0; recvsize := 0;
  repeat
    recvsize := recv(sock, buf, sizeof(buf), 0);
    for i := 1 to recvsize do
      s := s + buf[i];
    inc(recvsum, recvsize);
  until recvsize = 0;
  sock_recv := recvsum;
end;

Var
  s, code : string;
  t, i : integer;
  fo : textfile;
begin
  WSAStartUp($101,WSAData);
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if sock = INVALID_SOCKET then
    begin
      memo1.Lines.Add('INVALID_SOCKET error');
      exit;
    end;

  host.sin_family := AF_INET;
  host.sin_port := htons(80);
  host.sin_addr.S_addr := inet_addr('193.41.60.108');

  //коннектимся к серверу
  if connect(sock, host, SizeOf(host)) > 0 then
    begin
      memo1.Lines.Add('connect() error');
      exit;
    end;

  //запрос для получения страницы с формой
  s := 'GET /ru/sms/form/ HTTP/1.1'+nl+'Host: www.kyivstar.net'+nl+'Accept: */*'+nl+nl;

 //отправляем запрос
  if not sock_send(s) then
    begin
      memo1.Lines.Add('sock_send() error');
      exit;
    end;

  t := sock_recv(s);
  memo1.Lines.Add('Получено байт: ' + inttostr(t));
  code := copy(s, pos('code=', s)+5, 4); //берем код из кукиса

  memo1.Lines.Add('Код: '+code);
  memo1.Lines.Add(s);

  //запрос для получения картинки с кодом
  s := 'GET /sms_code_image.gif HTTP/1.1'+nl+'Host: www.kyivstar.net'+nl+'Accept: */*'+nl+'Referer: http://www.kyivstar.net/ru/sms/form/'+nl+'Cookie: code='+code+nl+nl;

  closesocket(sock);
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if sock = INVALID_SOCKET then
    begin
      memo1.Lines.Add('INVALID_SOCKET error');
      exit;
    end;

  //коннектимся к серверу
  if connect(sock, host, SizeOf(host)) > 0 then
    begin
      memo1.Lines.Add('connect() error');
      exit;
    end;

  memo1.Lines.Add(s);
  if not sock_send(s) then
    begin
      memo1.Lines.Add('sock_send() error');
      exit;
    end;

  t := sock_recv(s);
  memo1.Lines.Add('Получено байт: ' + inttostr(t));
  while pos(#0, s)>0 do
    s[pos(#0, s)] := ' ';

  memo1.Lines.Add(s);
  assignfile(fo, '1.png'); rewrite(fo);
  t := pos('PNG', s)-1;
  for i := t to length(s) do
    write(fo, s[i]);
  closefile(fo);

  //отправка сообщения
  s := 'POST /ru/sms/form/ HTTP/1.1'+nl+'Host: www.kyivstar.net'+nl+'Accept: */*'+nl+'Referer: http://www.kyivstar.net/ru/sms/form/'+nl+'Cookie: code='+code+nl+'Content-Length: 78'+nl+'Content-Type: application/x-www-form-urlencoded'+nl+nl+'submitted=true&mobcode=097&number=9604122&lat=0&message=12345%21&antispam='+code+nl+nl;
  closesocket(sock);
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if sock = INVALID_SOCKET then
    begin
      memo1.Lines.Add('INVALID_SOCKET error');
      exit;
    end;

  //коннектимся к серверу
  if connect(sock, host, SizeOf(host)) > 0 then
    begin
      memo1.Lines.Add('connect() error');
      exit;
    end;

  memo1.Lines.Add(s);
  if not sock_send(s) then
    begin
      memo1.Lines.Add('sock_send() error');
      exit;
    end;

  //получение статуса сообщения
  s := 'GET /ru/sms/form/?request_status=true HTTP/1.1'+nl+'Host: www.kyivstar.net'+nl+'Accept: */*'+nl+'Referer: http://www.kyivstar.net/ru/sms/form/'+nl+'Cookie: code='+code+nl+nl;
    closesocket(sock);
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if sock = INVALID_SOCKET then
    begin
      memo1.Lines.Add('INVALID_SOCKET error');
      exit;
    end;
  //коннектимся к серверу
  if connect(sock, host, SizeOf(host)) > 0 then
    begin
      memo1.Lines.Add('connect() error');
      exit;
    end;

  memo1.Lines.Add(s);
  if not sock_send(s) then
    begin
      memo1.Lines.Add('sock_send() error');
      exit;
    end;
  t := sock_recv(s);
  memo1.Lines.Add('Получено байт: ' + inttostr(t));

  memo1.Lines.Add(s);
  closesocket(sock);
  WSACleanup();
end;


Запросы кажеться правильные, хотя возможно именно в них и проблема...  
PM MAIL   Вверх
_hunter
Дата 4.7.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



ну так сравни запросы браузера со своими.
+ ответ сервера почитай
++ ты уверен что ты правильно картинку распознал? 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
RA
Дата 4.7.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Цитата(_hunter @  4.7.2006,  16:25 Найти цитируемый пост)
ты уверен что ты правильно картинку распознал? 


Ахтунг-Ахтунг!  smile  щас посмотрел как там всё работает, код картинки передаётся в кукизе браузеру, тоесть распознавать её  не составит проблемы smile

Добавлено @ 16:50 
XbiT, а ты отправляеш куку ? 

Это сообщение отредактировал(а) RAdmin - 4.7.2006, 16:46
PM   Вверх
XbiT
Дата 4.7.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



   
Код

POST /ru/sms/form/ HTTP/1.1
Host: www.kyivstar.net
Accept: */*
Referer: http://www.kyivstar.net/ru/sms/form/
Cookie: code= +code
Content-Length: 78
Content-Type: application/x-www-form-urlencoded

submitted=true&mobcode=097&number=9604122&lat=0&message=12345%21&antispam=+code




Вот запрос, кукиз с кодом отправляю... 
в переменной code сохраняеться код.
Но смс упорно не хочет отправляться smile 

Это сообщение отредактировал(а) XbiT - 4.7.2006, 17:07
PM MAIL   Вверх
XbiT
  Дата 5.7.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



Сейчас проверил запросыс программой Coyote(тоже отправляет смс), кажеться всё правильно. Но всё равно не отправляеться smile(( 
PM MAIL   Вверх
RA
Дата 6.7.2006, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



Ну вобщем у меня всё получилось, правда я использовал в качесве HTTP клиента компоненты ICS.
Если надо могу пример скинуть.

Как я понял грабли именно тут  



Код

http://www.kyivstar.net/ru/sms/form/?


а и менно в наличии вопросительного знака в конце  smile для запроса POST , ибо как только я его туда поставил усё заработало у меня, а до этого бяка всякая была.


      

Это сообщение отредактировал(а) RAdmin - 6.7.2006, 01:39
PM   Вверх
XbiT
Дата 6.7.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



скинь пример плз denis90{at}gmail{dot}com 
PM MAIL   Вверх
RA
Дата 7.7.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



sent 
PM   Вверх
XbiT
Дата 8.7.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



RAdmin, спасибо, мэйл получил. буду разбираться... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.