Приветствую Вас Гость | RSS

Меню сайта

Категории раздела
Мои статьи [11]
Видео [3]

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Мои статьи

Использование прокси в программе

Сейчас покажу, как нужно использовать различные типы прокси в запросах на Indy. Прокси будем брать из Edit1 и делить на адрес и порт.
Самое простое это использовать 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)));



Всё предельно понятно и просто.

Для использования 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 к IdSSLIOHandlerSocketOpenSSL1, а IdSSLIOHandlerSocketOpenSSL1 к IdHTTP1:
 

IdSSLIOHandlerSocketOpenSSL1.TransparentProxy:=IdSocksInfo1;
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;



В результате у нас будет наглядное изображение прогресса загрузки страницы.

 

http://narod.yandex.ru/disk/35443848001/proxy-v-delphi.zip.html

Категория: Мои статьи | Добавил: Mitiay (11.06.2014)
Просмотров: 411 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
  Мой сайт   Главная   Регистрация   Вход  
Форма входа

Поиск

  • Есть вопросы?
  • Друзья сайта


    Разработка программного обеспечения
    Copyright MyCorp © 2024 Бесплатный хостинг uCoz