Использование прокси в программе
Автор: admin | Дата: 25-12-2011, 10:03 | Комментариев: 0 | Просмотров: 7 080
Сейчас покажу, как нужно использовать различные типы прокси в запросах на Indy. Прокси будем брать из Edit1 и делить на адрес и порт.
Самое простое это использовать HTTP-прокси:
Всё предельно понятно и просто.
Для использования SOCKS4 и SOCKS5 кроме компонента IdHTTP1 требуются компонент IdSocksInfo (вкладка Indy Misc) и компонент IdSSLIOHandlerSocketOpenSSL (вкладка Indy I/O Handlers).
В IdSocksInfo указываем тип прокси (svSocks4 или svSocks5), адрес и порт, а также выставляем свойство Authentication в saNoAuthentication:
И присоединяем IdSocksInfo1 к IdSSLIOHandlerSocketOpenSSL1, а IdSSLIOHandlerSocketOpenSSL1 к IdHTTP1:
После этого можно делать запрос. Запрос я делал на страницу moi-ip.ru, где на странице отображается IP запрашиваемого. И парсим из ответа IP адрес, который выводим в Memo. Если всё верно и прокси хороший, то используемый прокси и выведенный в Memo должны совпасть.

В качестве бонуса в программе показано, как можно показывать прогресс получения ответа сервера. Он отображается в компоненте Gauge (можно также использовать ProgressBar). В самом начале запроса (IdHTTP1WorkBegin) из заголовков ответа сервера из поля Content-Length берем длину получаемого ответа (обращаю внимание, что такого заголовка может не быть, а значит не всегда можно знать, какой длины будет ответ). И свойству MaxValue присваиваем это значение:
А во время получения ответа (IdHTTP1Work) (а приходит он частями) изменяем свойство Progress:
В результате у нас будет наглядное изображение прогресса загрузки страницы.
[Скачать] исходник взято с avtuh.ru
Пароль на все архивы: hh
Самое простое это использовать HTTP-прокси:
IdHTTP1.ProxyParams.ProxyServer:=Copy(Edit1.Text,1,Pos(':',Edit1.Text)-1);
IdHTTP1.ProxyParams.ProxyPort:=StrToInt(Copy(Edit1.Text,Pos(':',Edit1.Text)
+1,Length(Edit1.Text)));
IdHTTP1.ProxyParams.ProxyPort:=StrToInt(Copy(Edit1.Text,Pos(':',Edit1.Text)
+1,Length(Edit1.Text)));
Всё предельно понятно и просто.
Для использования SOCKS4 и SOCKS5 кроме компонента IdHTTP1 требуются компонент IdSocksInfo (вкладка Indy Misc) и компонент IdSSLIOHandlerSocketOpenSSL (вкладка Indy I/O Handlers).
В IdSocksInfo указываем тип прокси (svSocks4 или svSocks5), адрес и порт, а также выставляем свойство Authentication в saNoAuthentication:
IdSocksInfo1.Version:=svSocks4;
IdSocksInfo1.Host:=Copy(Edit1.Text,1,Pos(':',Edit1.Text)-1);
IdSocksInfo1.Port:=StrToInt(Copy(Edit1.Text,Pos(':',Edit1.Text)+1,
Length(Edit1.Text)));
IdSocksInfo1.Authentication:= saNoAuthentication;
IdSocksInfo1.Host:=Copy(Edit1.Text,1,Pos(':',Edit1.Text)-1);
IdSocksInfo1.Port:=StrToInt(Copy(Edit1.Text,Pos(':',Edit1.Text)+1,
Length(Edit1.Text)));
IdSocksInfo1.Authentication:= saNoAuthentication;
И присоединяем IdSocksInfo1 к IdSSLIOHandlerSocketOpenSSL1, а IdSSLIOHandlerSocketOpenSSL1 к IdHTTP1:
IdSSLIOHandlerSocketOpenSSL1.TransparentProxy:=IdSocksInfo1;
IdHTTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
IdHTTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
После этого можно делать запрос. Запрос я делал на страницу moi-ip.ru, где на странице отображается IP запрашиваемого. И парсим из ответа IP адрес, который выводим в Memo. Если всё верно и прокси хороший, то используемый прокси и выведенный в Memo должны совпасть.

В качестве бонуса в программе показано, как можно показывать прогресс получения ответа сервера. Он отображается в компоненте Gauge (можно также использовать ProgressBar). В самом начале запроса (IdHTTP1WorkBegin) из заголовков ответа сервера из поля Content-Length берем длину получаемого ответа (обращаю внимание, что такого заголовка может не быть, а значит не всегда можно знать, какой длины будет ответ). И свойству MaxValue присваиваем это значение:
Gauge1.MaxValue:=strtoint(Pars('Content-Length: ', idhttp1.Response.RawHeaders.Text, #13#10));
А во время получения ответа (IdHTTP1Work) (а приходит он частями) изменяем свойство Progress:
Gauge1.Progress:=AWorkCount;
В результате у нас будет наглядное изображение прогресса загрузки страницы.
[Скачать] исходник взято с avtuh.ru
Пароль на все архивы: hh
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.



















