Delphi – Indy. Использование прокси (HTTP и SOCKS)

6 августа 2010    

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

Прокси в Delphi

В качестве бонуса в программе показано, как можно показывать прогресс получения ответа сервера. Он отображается в компоненте Gauge (можно также использовать ProgressBar). В самом начале запроса (IdHTTP1WorkBegin) из заголовков ответа сервера из поля Content-Length берем длину получаемого ответа (обращаю внимание, что такого заголовка может не быть, а значит не всегда можно знать, какой длины будет ответ). И свойству MaxValue присваиваем это значение:

Gauge1.MaxValue:=strtoint(Pars('Content-Length: ', idhttp1.Response.RawHeaders.Text, #13#10));

А во время получения ответа (IdHTTP1Work) (а приходит он частями) изменяем свойство Progress:

Gauge1.Progress:=AWorkCount;

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


Похожие записи из категории Статьи

  • Прокрутка компонентов, не имеющих фокуса ввода
  • Количество вхождений подстроки в строке
  • Отправка email через скрипт
  • Как полезно иногда пользоваться сниффером
  • Delphi – Indy. Отправка письма с вложением
  • Нравится


    Метки: , , , , , , , , Рубрика: Статьи


    обсуждение

    1. vTeme пишет:

      Спасибо. Получил порцию знаний

      [Ответить]

    2. vTeme пишет:

      Дельфи показывает кучу ошибок при открытии проекта ))Это из за урезанной версии?:Borland Delphi 10 Lite 3.0 ??

      [Ответить]

    3. unit1 пишет:

      Это из-за “Gauge1″ – типо прогресс бара…
      Прочитай с начало…
      В uses можешь убрать (где Gauge1 используется) и остальное проигнорировать.
      И эта версия по моему на протяжении месяца полноценно работает.

      А у меня другой вопрос, как сделать чтобы ошибка об плохой проксе не выскакивала и не останавливала работу программы?

      [Ответить]

      Zdez Bil Ya Reply:

      Используйте
      try
      запрос
      except
      end;

      [Ответить]

    4. sem пишет:

      А как можно реализовать из файла?
      *.txt

      [Ответить]

    5. Den пишет:

      Спасибо, просто супер статья=)

      [Ответить]

    6. Gamer пишет:

      В исходниках всё верно

      [Ответить]

    7. NEoMASTERR пишет:

      во во как раз такое искал)) А как можно сделать поиск прокси на дельфи?

      [Ответить]

    8. NEoMASTERR пишет:

      IdSSLIOHandlerSocketOpenSSL – где скачать??

      [Ответить]

      Zdez Bil Ya Reply:

      В комплекте Indy идёт

      [Ответить]

    9. Yuri пишет:

      А как этот прокси можно использовать на деле (для чего его можно применить) ?

      [Ответить]

    10. VorVV пишет:

      Каким образом использовать эту информацию для отправки почты по SMTP (Indy) через прокси? Точнее сказать здесь показано как сделать через HTTP, а как через SMTP? и если TLS/SSL….

      [Ответить]

      Zdez Bil Ya Reply:

      Найти у IdSMTP свойство IOHandler и пользоваться аналогично

      [Ответить]

    11. Иван пишет:

      А как потом отключить прокси???

      [Ответить]

    12. женя пишет:

      почему пишет “couldnt load SSL library” разве эти библиотеки обязательны при использовании соксов?

      [Ответить]

      Zdez Bil Ya Reply:

      Если так пишет при их отсутствии, то да

      [Ответить]

    13. женя пишет:

      библиотеки установил, всеравно пишет. все компоненты подключены верно.

      [Ответить]

      Zdez Bil Ya Reply:

      Другие версии библиотек пробуйте

      [Ответить]

      Anonimus Reply:

      Вся проблема может быть в инди, какая версия инди у вас?
      если 9 то обновити инди.

      [Ответить]

    14. Ont пишет:

      Я новичек и только разбираюсь в этом. У меня стоит d7 пришлось переустановить indy. Скачал исходник, при открытии говорит, что не нашел project1.res и создает новый. Начинаю запускать выдает такую ошибку, [Error] Project1.dpr(11): Undeclared identifier: ‘MainFormOnTaskbar’ Как исправить?

      [Ответить]

      Zdez Bil Ya Reply:

      Удалить/закомментировать строку

      [Ответить]

    15. Павел пишет:

      Спасибо!

      [Ответить]

    16. Павел пишет:

      Как сделать тайм аут?

      [Ответить]

    17. Павел пишет:

      В бруте. и как подключить через список?

      [Ответить]

    18. Victt пишет:

      Добры вечер, плиз подскажите почему (и как исправить это) при компиляции вашего произведения Delphi выдает след. сообщение об ошибке:
      1)The IdHTTP1Work method referenced by IdHTTP1.OnWork has an incompatible parameter list. Remove the reference?
      2)The IdHTTP1WorkBegin method referenced by IdHTTP1.OnWorkBegin has an incompatible parameter list. Remove the reference?
      P.S.: Информ. о программном обеспечении: Delphi 7 Indy Version 10.0.76

      [Ответить]

    19. Ree4 пишет:

      Как эти компоненты можно динамически создать?

      [Ответить]

    20. Tip.the.besT пишет:

      indy очень глючит при работе с прокси. Для таких дел лучше использовать Synapse. Synapse преуспевает перед indy в работе с прокси.

      [Ответить]


    оставить комментарий или два