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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2012, 13:42   #1
TEED!
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 22
По умолчанию Использование прокси из Memo1,в потоке.

И так 3 день ищу,код как же в потоке использовать прокси из мемо.
Есть код:
Код:
potok = class(TThread) //MyThread - заданное нами имя потока.
   private
     { Private declarations }
   protected
     procedure Execute; override;
   end;

var
  Form1: TForm1;
  TMyThread: potok;
implementation

{$R *.dfm}

procedure potok.Execute;
var
Strings: TStrings;
i: integer;
Code:string;
pro: integer;
proxy: string;
tmp: string;
data: tstringlist;
begin
for pro:=0 to Form1.Memo1.lines.count-1 do
begin
tmp := pos(':', Form1.Memo1.Lines.Strings[pro]);
if tmp <> 0 then
 begin
  tmps := copy(Form1.Memo1.Lines.Strings[pro], 1, tmp-1);
  tmps2 := copy(Form1.Memo1.Lines.Strings[pro], tmp+1, length(Form1.Memo1.Lines.Strings[pro]));
 end;
if tmp = 0 then
 begin
  tmps := Form1.Memo1.Lines.Strings[pro];
  tmps2 := '8080';
 end;
ProCount := Form1.Memo1.Lines.Count;
//ProNow := Form1.Memo1.Lines.Count[Pro];
ProNow:=ProNow+1;
//Form1.Label9.Caption:='Working... ['+IntToStr(ProNow)+'/'+IntToStr(ProCount)+']';
Form1.IdHTTP1.ProxyParams.ProxyServer:=tmps;
Form1.IdHTTP1.ProxyParams.ProxyPort:=StrToInt(tmps2);
Form1.Label4.Caption:=Form1.Memo1.Lines.Strings[pro];
data.add('id=4329');
idhttp1.post('http://gmcs.su/up/', data);
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
potok.Create(false);
end;

end.
Объясняю что делает potok.excute.
Берет из мемо1 прокси,и отправляет через них пост запрос.

Но компилятор ругается на :tmp := pos(':', Form1.Memo1.Lines.Strings[pro]);

Тема ошибки:[DCC Error] Unit1.pas(59): E2010 Incompatible types: 'string' and 'Integer'

Подскажите что не так?
А воопще кто может помочь мне в аське\скайпе я буду очень признателен.
TEED! вне форума Ответить с цитированием
Старый 05.06.2012, 14:16   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
tmp := pos(':', Form1.Memo1.Lines.Strings[pro]);
if tmp <> 0 then
function pos(... ): integer;
Тема ошибки:[DCC Error] Unit1.pas(59): E2010 Incompatible types: 'string'(tmp) and 'Integer'(pos: integer)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.06.2012 в 14:18.
evg_m вне форума Ответить с цитированием
Старый 05.06.2012, 14:17   #3
TEED!
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Тема ошибки:[DCC Error] Unit1.pas(59): E2010 Incompatible types: 'string'(tmp) and 'Integer'(0)
а что исправить то надо?я что то не догоняю.
TEED! вне форума Ответить с цитированием
Старый 05.06.2012, 14:39   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
tmp: integer;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.06.2012, 14:42   #5
TEED!
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 22
По умолчанию

Усе исправил.
Код:
Код:
potok = class(TThread) //MyThread - заданное нами имя потока.
   private
     { Private declarations }
   protected
     procedure Execute; override;
   end;

var
  Form1: TForm1;
  TMyThread: potok;
implementation

{$R *.dfm}

procedure potok.Execute;
var
Strings: TStrings;
i: integer;
Code:string;
pro: integer;
proxy: string;
tmps, tmps2 : String;
idhttp1: string;
tmp, ProNow, ProCount, NumPro, BadProxy, GoodProxy, SourceProxy : Integer;
flag : boolean;
data: tstringlist;

begin
for pro:=0 to Form1.Memo1.lines.count-1 do
begin
tmp := pos(':', Form1.Memo1.Lines.Strings[pro]);
if tmp <> 0 then
 begin
  tmps := copy(Form1.Memo1.Lines.Strings[pro], 1, tmp-1);
  tmps2 := copy(Form1.Memo1.Lines.Strings[pro], tmp+1, length(Form1.Memo1.Lines.Strings[pro]));
 end;
if tmp = 0 then
 begin
  tmps := Form1.Memo1.Lines.Strings[pro];
  tmps2 := '8080';
 end;
ProCount := Form1.Memo1.Lines.Count;
//ProNow := Form1.Memo1.Lines.Count[Pro];
ProNow:=ProNow+1;
//Form1.Label9.Caption:='Working... ['+IntToStr(ProNow)+'/'+IntToStr(ProCount)+']';
Form1.IdHTTP1.ProxyParams.ProxyServer:=tmps;
Form1.IdHTTP1.ProxyParams.ProxyPort:=StrToInt(tmps2);
Form1.Label4.Caption:=Form1.Memo1.Lines.Strings[pro];
data.add('id=4329');
form1.idhttp1.post('http://gmcs.su/up/', data);
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
potok.Create(false);
end;

end.
Запускаю проект,вставляю в мемо прокси,включаю снифер жму на кнопку старт(и в проекте и в сниффере) и нечего не происходит...
сниффер молчит.
Запрос на сайте так и не дошел
Что не так?!
TEED! вне форума Ответить с цитированием
Старый 05.06.2012, 14:58   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Честно говоря, мне не нравится, что вы в потоке обращаетесь к элементам формы и используете idhttp с формы.
Имхо, лучше передавать потоку стринглист с прокси и создавать свой idhttp.
Во-вторых, я не вижу, чтобы вы создали data.
Удивительно, что он вообще запустился (или я чего-то не знаю про Дельфи ).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.06.2012, 15:04   #7
TEED!
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Честно говоря, мне не нравится, что вы в потоке обращаетесь к элементам формы и используете idhttp с формы.
Имхо, лучше передавать потоку стринглист с прокси и создавать свой idhttp.
Во-вторых, я не вижу, чтобы вы создали data.
Удивительно, что он вообще запустился (или я чего-то не знаю про Дельфи ).
data.add('id=4329');

Может поможете исправить?
TEED! вне форума Ответить с цитированием
Старый 05.06.2012, 15:41   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
data.add('id=4329');
Это не создание, а заполнение данными.

Код нужно форматировать, а то читать очень сложно.
Код:
...
data: tstringlist;

begin
  data := tstringlist.create;
  for pro := 0 to Form1.Memo1.lines.count - 1 do
  begin
    tmp := pos(':', Form1.Memo1.Lines.Strings[pro]);
    if tmp <> 0 then
    begin
      tmps := copy(Form1.Memo1.Lines.Strings[pro], 1, tmp - 1);
      tmps2 := copy(Form1.Memo1.Lines.Strings[pro], tmp + 1, length(Form1.Memo1.Lines.Strings[pro]));
    end;
    if tmp = 0 then
    begin
      tmps := Form1.Memo1.Lines.Strings[pro];
      tmps2 := '8080';
    end;
    ProCount := Form1.Memo1.Lines.Count;
    //ProNow := Form1.Memo1.Lines.Count[Pro];
    ProNow := ProNow + 1;
    //Form1.Label9.Caption:='Working... ['+IntToStr(ProNow)+'/'+IntToStr(ProCount)+']';
    Form1.IdHTTP1.ProxyParams.ProxyServer := tmps;
    Form1.IdHTTP1.ProxyParams.ProxyPort := StrToInt(tmps2);
    Form1.Label4.Caption := Form1.Memo1.Lines.Strings[pro];
    data.clear;
    data.add('id=4329');
    form1.idhttp1.post('http://gmcs.su/up/', data);
  end;
  data.free;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.06.2012 в 15:46.
BDA вне форума Ответить с цитированием
Старый 05.06.2012, 15:49   #9
TEED!
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 22
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Это не создание, а заполнение данными.

Код нужно форматировать, а то читать очень сложно.
Код:
...
data: tstringlist;

begin
  data := tstringlist.create;
  for pro := 0 to Form1.Memo1.lines.count - 1 do
  begin
    tmp := pos(':', Form1.Memo1.Lines.Strings[pro]);
    if tmp <> 0 then
    begin
      tmps := copy(Form1.Memo1.Lines.Strings[pro], 1, tmp - 1);
      tmps2 := copy(Form1.Memo1.Lines.Strings[pro], tmp + 1, length(Form1.Memo1.Lines.Strings[pro]));
    end;
    if tmp = 0 then
    begin
      tmps := Form1.Memo1.Lines.Strings[pro];
      tmps2 := '8080';
    end;
    ProCount := Form1.Memo1.Lines.Count;
    //ProNow := Form1.Memo1.Lines.Count[Pro];
    ProNow := ProNow + 1;
    //Form1.Label9.Caption:='Working... ['+IntToStr(ProNow)+'/'+IntToStr(ProCount)+']';
    Form1.IdHTTP1.ProxyParams.ProxyServer := tmps;
    Form1.IdHTTP1.ProxyParams.ProxyPort := StrToInt(tmps2);
    Form1.Label4.Caption := Form1.Memo1.Lines.Strings[pro];
    data.clear;
    data.add('id=4329');
    form1.idhttp1.post('http://gmcs.su/up/', data);
  end;
  data.free;
end;
спасибо помогло
Работает как часы !
TEED! вне форума Ответить с цитированием
Старый 05.06.2012, 17:38   #10
TEED!
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 22
По умолчанию

Появилась другая проблема.
При переборе прокси,если есть плохая прокси то он встает на ней и дальше не переберает(т.е пытается все на нее отправить).
Пробывал form1.idhttp1.ReadTimeout:=100;
не помагает,не реагирует...
Что делать?!
TEED! вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа в memo1 Пяtnышк0 Помощь студентам 1 02.04.2012 19:32
Неизвестный идентификатор Memo1 dubailand Общие вопросы Delphi 4 05.01.2012 19:08
memo1 и массив kuzmich Общие вопросы Delphi 3 12.08.2011 10:56
Использование глобальной переменной в потоке Шульц Общие вопросы Delphi 12 18.03.2010 20:00
Использование прокси в WinSock shinobi2 Работа с сетью в Delphi 0 14.01.2009 20:07