Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 18:40   #1
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию Исключения, Idhttp, непонятно...

Сразу перехожу к сути проблемы, я пишу программу которая отсылает POST запросы на 50+ сайтов, делаю это таким образом
ПРИМЕР:
Код:
if form1.CheckListBox1.Checked[4] then
  try
     Form1.proc.Lines.Add(' Начинаю регистрацию на сайте '+Form1.CheckListBox1.Items.Strings[4]);
    Otvet:=Form1.IdHTTP1.Get('http://www.openlinks.ru/addurl.phtml?add');
   {Получаю каптчу}
     Form1.proc.Lines.Add(' Получаю каптчу с сайта '+Form1.CheckListBox1.Items.Strings[4]);

     CapUrl:=(copy(otvet,pos('code.php?', otvet), posEx('>',otvet, pos('code.php?', otvet))-pos('code.php?', otvet)));
     Captcha1:=TMemoryStream.Create;
     form1.IdHTTP1.Get('http://www.openlinks.ru/'+capurl+'>',Captcha1);
     Captcha1.Position:=0;
     form1.image1.picture.free;
     Captcha1.SaveToFile('1.png');
     Captcha1.Free;
     Form1.Image1.Picture.LoadFromFile('1.png');
    {Формирование POST запроса}
     PostData.Clear;
   {Здесь часть не интересная кода с простым добавление строк в StringList}
     Form1.proc.Lines.Add(' Получил каптчу, жду ввода '+Form1.CheckListBox1.Items.Strings[4]);
     while form1.Capt.Tag=0 do sleep(1000); //приостанавливаю поток и жду ввода каптчу
     form1.Capt.Tag:=0;
     PostData.Add('secretcode='+form1.Code.Text);
     PostData.Add('name='+form1.title.Text);
     PostData.Add('url='+form1.link.Text);
     Postdata.Add('description='+form1.stat.Text+' '+form1.title.Text+' '+ form1.name.Text);
     PostData.add('category1=17');
     PostData.Add('country=Россия');
     PostData.Add('town=Москва');
     PostData.Add('contact='+form1.name.Text+' '+form1.famil.Text);
     PostData.Add('email='+form1.mail.Text);
     PostData.add('readrules=1');
     PostData.Add('news=0');
     Otvet:=Form1.IdHTTP1.Post('http://www.openlinks.ru/addurl.phtml?add', postdata);
     if Pos('уже есть',lowercase(Otvet))<>0  then form1.proc.Lines.Add('Ошибка: Ваш сайт уже есть в базе');
     if Pos('http://www.openlinks.ru/change.phtml',lowercase(OtvEt))<>0 then form1.proc.Lines.Add('Успешно!');
     usp:=usp+1;
     Form1.proc.Lines.Add('-----Регистрация на сайте '+Form1.CheckListBox1.Items.Strings[4]+' завершена-----');
      except
       Form1.proc.Lines.Add('Неизвестная ошибка!');
    end;

if form1.CheckListBox1.Checked[5] then
  try
     Form1.proc.Lines.Add(' Начинаю регистрацию на сайте '+Form1.CheckListBox1.Items.Strings[5]);
     Otvet:=Form1.IdHTTP1.Get('http://astraclub.ru/forum/profile.php?mode=register&agreed=true');
     {Получаю каптчу}
     Form1.proc.Lines.Add(' Получаю каптчу с сайта '+Form1.CheckListBox1.Items.Strings[5]);
     Pos1:= pos('name="confirm_id" value="',otvet);
     PosEx1:= posex('/', otvet, pos1+25);
     cid:=copy(otvet,pos1+25, posex1-pos1-27);
     capurl:=('http://astraclub.ru/profile.php?mode=confirm&id='+cid);
     Captcha1:=TMemoryStream.Create;
     form1.IdHTTP1.Get(capUrl,Captcha1);
     Captcha1.Position:=0;
     Captcha1.savetoFile('1.png');
     form1.Image1.Picture.loadFromFile('1.png');
 {Формирование запроса}
     PostData.Clear;
{Здесь часть не интересная кода с простым добавление строк в StringList}
     PostData.Add('password_confirm='+form1.pass.Text);
     Form1.proc.Lines.Add(' Получил каптчу, жду ввода '+Form1.CheckListBox1.Items.Strings[5]);
      while form1.Capt.Tag=0 do sleep(1000); //приостанавливаю поток и жду ввода каптчу
     form1.Capt.Tag:=0;
     PostData.Add('confirm_code='+form1.Code.Text);
{Здесь часть не интересная кода с простым добавление строк в StringList}
     PostData.Add('submit=Отправить');
     OtVet:=form1.IdHTTP1.Post('http://astraclub.ru/forum/profile.php', PostData);
     if pos('Вы ввели неверный код подтверждения', otvet)<>0 then form1.proc.Lines.Add('ОШИБКА: Вы ввели неверный код подтверждения');
     if Pos('Извините, этот адрес e-mail уже занят другим пользователем', otvet)<>0 then 
     form1.proc.Lines.Add('ОШИБКА: Извините, этот адрес e-mail уже занят другим пользователем');
     if Pos('Учётная запись была создана', Otvet)<>0 then
     Begin
     form1.proc.Lines.Add('Учётная запись была создана. . Проверьте вашу почту и подтвердите регистрацию.');
     End;
      Form1.proc.Lines.Add('-----Регистрация на сайте '+Form1.CheckListBox1.Items.Strings[5]+' завершена-----');
     except
       Form1.proc.Lines.Add('Неизвестная ошибка!');
     end;
Вот я привел конкретный пример. Вот таких кусков кода в программе 25. Как сами видите есть "обработка" исключений, то есть не тупо Begin, а try. Когда запустив постинг программу исключит один раз на каком-то сайте ( например на самом первом), то все остальные сайты, абсолютно все, которые следуют за ним тоже не будут корректно сделаны, будут точно такие же исключения, при исключении появляется сообщение Abstract Error, я уже с ног сбился не знаю что делать. Подскажите что делать, как подступиться.

Последний раз редактировалось mihali4; 26.11.2010 в 20:26.
kardinal94 вне форума Ответить с цитированием
Старый 26.11.2010, 19:21   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

кто такой PostData?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.11.2010, 19:31   #3
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Postdata: TStringList

19:32

var udach, CapB,CapEnd, pos1, posex1, usp, neiz:integer;
POstData:TstringList;
Captcha1:TMemoryStream;
Otvet, CapUrl, stat1, cid, sid, fbi:string;
CapPic:TPngImage;

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом. Это - флуд.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Уважайте форумчан, и они ответят вам взаимностью...
Модератор

Последний раз редактировалось mihali4; 26.11.2010 в 20:28.
kardinal94 вне форума Ответить с цитированием
Старый 26.11.2010, 19:36   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

начнем с того что под отладчиком с настройками по умолчанию вы всегда увидите ошибку.
во вторых, трассировали код?
на предмет точных вылетов?(с точностью до строки)

надеюсь PostData инициализируется через TStringList.Create
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.11.2010, 20:04   #5
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
надеюсь PostData инициализируется через TStringList.Create
Конечно, в самом начале потока

Код:
PostData:=TstringList.Create;
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
во вторых, трассировали код?
на предмет точных вылетов?(с точностью до строки)
Мозги как то до этого не доходили.... Сейчас попробую. Посмотрим что там у нас

21:06

Хммм. У меня исключение возникает после
Код:
     form1.Image1.Picture.loadFromFile('1.png');
Действительно странно, так как картинки вроде корректно загружается с сайта, сохраняется тоже нормально вроде.

Последний раз редактировалось mihali4; 27.11.2010 в 22:13.
kardinal94 вне форума Ответить с цитированием
Старый 26.11.2010, 21:49   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Пути нужно полные указать...
Модуль TPNGImage подключен ?
mihali4 вне форума Ответить с цитированием
Старый 27.11.2010, 19:47   #7
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

mihali4, конечно подключен, пока не произойдет одно исключение все идет отлично
kardinal94 вне форума Ответить с цитированием
Старый 27.11.2010, 20:15   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а можно адресок картинки?
это точно png?
если уверены что png, попробуйте грузить руками а не автоматом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.11.2010, 22:06   #9
kardinal94
Форумчанин
 
Аватар для kardinal94
 
Регистрация: 26.04.2010
Сообщений: 105
По умолчанию

Точно png, я лично проверяю все. Заменил сейчас TImage на TVweBrowser и указал полный путь, заработало, все нормально грузится, только у меня теперь другая проблема, но об этом в другой теме.
kardinal94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HELLO WORLD!!- непонятно некоторое Dimarik Общие вопросы C/C++ 5 16.10.2009 22:41
Непонятно.... IICuX123 Общие вопросы .NET 2 23.07.2009 10:27
непонятно StasSv Microsoft Office Excel 1 26.02.2009 14:16
что то непонятно sergei64_89 Общие вопросы C/C++ 9 25.05.2008 16:58