Господа! Меня волнует вопрос какой запрос нужно послать прокси серверу, что бы он индетифицировал себя? ЗЫ: Собираюсь писать прокси чекер "для_себя", просто не могу разобраться с запросом.
Ммм... не совсем ясна проблема... распиши пожалуйста подробнее, что именно тебе нужно ))) Всмысле, чтобы онидентифицировал себя?
Если требуетсья установить прокся это или нет хз. Если вообще жива ли прокся или как ойнить бред который живет на этом порту то достаточн оприконетиться иначе она мертва.
Простой чекер прокси на компонентах (просто пример, перпиши на WinSock). Var Source: String; Host: String; Port: String; I: Integer; P: Integer; Begin For i:= 0 to SourceMemo.Lines.Counts - 1 do Begin P:= Pos(':', SourceMemo.Lines.String); Host:= Copy(SourceMemo.Lines.String, 0 , P); Port:= Copy(SourceMemo.Lines.String, P + 1, Length(SourceMemo.Lines.Strings - p - 1)); idHTTP.ProxyParams.Host:= Host; idHTTP.ProxyParams.Port:= StrToInt(Port); Source:= idHTTP.Get('http://ya.ru'); if Pos('http://www.yandex.ru/', Source) <> 0 then Begin ResultMemo.Lines.Add(Proxy + ' : ' + Port + ' подключение удалось'); End Else Begin ResultMemo.Lines.Add(Proxy + ' : ' + Port + ' подключение не удалось'); End; End; ResultMemo.Lines.SaveToFile('Checked.txt'); End; Хотя писать чекер на компонентах глупо
Это процедура для кнопки Start. (Delphi) Если кто не понял ещё на форме полжные прсутвовать 2 Memo исменами SourceMemo и ResultMemo и компонент idHTTP со вкладки Indy Clients и ещё одна кнопка (как раз для неё процедура написаная выше).
Сёдня попытался сделать простенький чекер на сокетах, зацените ) (думаю в коментариях код не нуждается ... да и в лом как-то коментить =) Code: type PCheckProxy = ^TCheckProxy; TCheckProxy = record ProxyHost : PChar; ProxyPort : Word; Timeout : Byte; // в секундах ConnectTo : PChar; ControlStr: PChar; end; function CheckProxy(lpCheckProxy: PCheckProxy) : Boolean; function GetIpByName : Boolean; var HostEnt: PHostEnt; begin HostEnt := gethostbyname(lpCheckProxy^.ProxyHost); Result := HostEnt <> nil; if Result then lpCheckProxy^.ProxyHost := inet_ntoa(PInAddr(HostEnt.h_addr_list^)^); end; var Arg: Integer; Query: String; TV: TTimeVal; FSet: TFDSet; Socket: TSocket; addr: sockaddr_in; WSAData: TWSAData; procedure IoCtl(cmd: DWord); begin ioctlsocket(Socket, cmd, Arg); end; begin Result := False; if WSAStartup($0101, WSAData) = 0 then try Socket := WinSock.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if Socket <> INVALID_SOCKET then try if inet_addr(lpCheckProxy^.ProxyHost) = INADDR_NONE then if not GetIpByName then Exit; ZeroMemory(@addr, SizeOf(sockaddr_in)); with addr, lpCheckProxy^ do begin sin_family := AF_INET; sin_port := htons(ProxyPort); sin_addr.S_addr := inet_addr(ProxyHost); end; Arg := 1; IoCtl(FIONBIO); FD_ZERO(FSet); FD_SET(Socket, FSet); TV.tv_sec := lpCheckProxy^.Timeout; TV.tv_usec := 0; connect(Socket, addr, SizeOf(sockaddr_in)); if WSAGetLastError <> WSAEWOULDBLOCK then Exit; if select(0, nil, @FSet, nil, @TV) <> 1 then Exit; Arg := 0; IoCtl(FIONBIO); Query := 'GET ' + lpCheckProxy^.ConnectTo + ' HTTP/1.1'#13#10'User-Agent: Mozilla/4.0'#13#10#13#10; if send(Socket, PChar(Query)^, Length(Query), 0) = SOCKET_ERROR then Exit; with lpCheckProxy^ do ControlStr := PChar(LowerCase(ControlStr)); while not Result do begin if select(0, @FSet, nil, nil, @TV) <> 1 then Break; IoCtl(FIONREAD); if Arg = 0 then Exit; SetLength(Query, Arg); recv(Socket, PChar(Query)^, Arg, 0); Result := Pos(lpCheckProxy^.ControlStr, LowerCase(Query)) <> 0; end; shutdown(Socket, SD_BOTH); finally closesocket(Socket); end; finally WSACleanup; end; end;