Доброе время суток...
Спаял я прокси чекер по уроку на ютабе..
У человека на видео всё работает. Рабочие прокси помечаются good, плохие bad..
У меня же все прокси помечаются как bad.
Не могли бы вы мне помочь, где я допустил ошибку?
Прокси - SOCKS. Нашёл в интернете, из разных источников, всего их у меня 115 шт.
И все без исключений помечаются как bad.
В потоках стоит условие, если гет запрос сработал, значит прокся валидная, и переменной
rez присваивается
1.
В противном случае
rez =
-1
На форме 2 кнопки(старт, стоп), 1 трэкбар(количество потоков) и 1 мемо, в который выводится прокси, без пометки - гуд, с пометкой - бэд.
В общем вот весь код программы:
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, sMemo, Vcl.ComCtrls, sTrackBar, Vcl.Buttons,
sSpeedButton, httpsend, System.SyncObjs;
type
TForm1 = class(TForm)
sSpeedButton1: TsSpeedButton;
sSpeedButton2: TsSpeedButton;
sSpeedButton3: TsSpeedButton;
sTrackBar1: TsTrackBar;
sMemo1: TsMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure sSpeedButton2Click(Sender: TObject);
procedure sSpeedButton3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
th = class(TThread) // поток
private
{ Private declarations }
IP, Port: string;
rez: Integer; // результат, принимает либо 1-гуд, либо -1-бэд
public
CurProxy: Integer; // переменная, для передачи потоку номера строки в стринглисте
http: THTTPSend;
{ Public declarations }
procedure Sync;
protected
procedure execute; override;
end;
var
Form1: TForm1;
Proxys: TStringList; // стринглист
Proxy, thread: Integer;
WORK: Boolean;
CS: TCriticalSection; // критическая секция
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Proxys := TStringList.Create;
CS := TCriticalSection.Create;
Proxys.LoadFromFile('c:/ProxySocks5.txt'); // загружаю прокси в стринглист
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(Proxys);
FreeAndNil(CS);
end;
procedure TForm1.sSpeedButton2Click(Sender: TObject);
begin
Proxy := -1; // -1, так как в потоке она будет увеличиваться, и начнется с 0
WORK := True; // для работы потока
for thread := 1 to sTrackBar1.Position do // количество потоков
begin
th.Create(False);
end;
end;
procedure TForm1.sSpeedButton3Click(Sender: TObject);
begin
WORK := False; // остановить потоки
end;
{ TMyThread }
procedure th.execute;
begin
while WORK do
begin
CS.Enter;
Inc(Proxy);
if Proxy < Proxys.Count then
begin
CurProxy := Proxy;
end
else
begin
WORK := False;
end;
CS.Leave;
{ ----------------------------------- }
if WORK then
begin
http := THTTPSend.Create;
IP := Copy(Proxys[CurProxy], 1, Pos(':', Proxys[CurProxy]) - 1); // копируем айпи из строки в стринглисте
Port := Copy(Proxys[CurProxy], Pos(':', Proxys[CurProxy]) + 1, Length(Proxys[CurProxy])); // копируем порт из строки в стринглисте
http.Sock.SocksIP := IP;
http.Sock.SocksPort := Port;
http.Document.Clear;
http.Headers.Clear;
http.Sock.SocksTimeout := 2000;
http.Sock.SocksResolver := false;
http.Protocol := '1.1';
if http.HTTPMethod('get', 'https://google.ru') then // если запрос прошёл, значит прокся валидная
begin
rez := 1; // если валидная то присваиваем 1
end
else
begin
rez := -1; // если не валидная то -1
end;
http.Free;
Synchronize(Sync);
end;
end;
end;
procedure th.Sync;
begin
case rez of
1:
begin
Form1.sMemo1.Lines.Add(IP + ':' + Port); // валид
end;
-1:
begin
Form1.sMemo1.Lines.Add('BAD ' + IP + ':' + Port); // не валид
end;
end;
end;
end.
Мои прокси -
ProxySocks5.txt