Вот код, которым пытаюсь проверять прокси на пригодность к работе с вконтактом. Если вкратце - берём из Memo2 проксю, пытаемся залогиниться на вконтакте. Получилось - складываем в Memo5. Не получилось, или превышен таймаут - в Memo10.
Код:
procedure TForm1.Button4Click(Sender: TObject);
var i,pos1,timeout:integer;
var prstring,server,port,login,pass,PageProfile:string;
var data:tstringlist;
var error:boolean;
begin
//Проверка прокси
Memo5.Clear;
Button4.Enabled:=false;
for i := 0 to Memo2.Lines.Count - 1 do
begin
prstring:=Memo2.Lines[i];
pos1:=pos(':', prstring);
server:=copy(prstring, 1, pos1-1);
port:=copy(prstring, pos1+1, length(prstring) - pos1);
//ShowMessage('Server: '+server+' Port: '+port );
//check
login:=Edit9.Text;
pass:=Edit10.Text;
timeout:=StrToInt(Edit11.Text);
IdHTTP1.AllowCookies:=true;
IdHTTP1.HandleRedirects:=false;
IdHttp1.ReadTimeout:=timeout;
IdHttp1.ConnectTimeout:=timeout;
IdHttp1.ProxyParams.ProxyServer:=(server);
IdHttp1.ProxyParams.ProxyPort:=StrToInt(port);
data:=tstringlist.create;
data.Add('act=login');
data.Add('expire=1');
data.Add('vk=');
data.Add('email='+login); // логин для авторизации
data.Add('pass='+pass); // пароль для авторизации
data.Add('success_url=http://vkontakte.ru/share.php?act=logged');
error:=false;
try
PageProfile:=IdHTTP1.Post('http://login.vk.com/', data);
except
error:=true;
end;
if not(error) then
begin
data.Clear;
data.Add('s='+Copy(PageProfile, Pos('value', PageProfile)+7, 56));
data.Add('op=slogin');
data.Add('redirect=1');
data.Add('expire=1');
data.Add('to=');
IdHTTP1.HandleRedirects:=true;
try
IdHTTP1.Post('http://vkontakte.ru/share.php?act=logged', data);
except
end;
Memo5.Lines.Add(server+':'+port);
Data.Free;
end
else
begin
Memo10.Lines.Add(server+':'+port);
Data.Free;
end;
end;
Button4.Enabled:=true;
//endofcheck
end;
С таймаутом проблемы - выкидывает ошибку: First chance exception at $7C812AFB. Exception class EIdReadTimeout with message 'Read timed out.'.
Отчего сие?