Как использовать прокси с Indy TIdWhois?

Я не могу понять, как использовать прокси с TIdWhois. У кого-нибудь есть ключ для меня?

Следуя описанию Реми, я использую следующий код:

w:=TIdWhois.Create(nil);
p:=TIdConnectThroughHttpProxy.Create(nil);
io:=TIdIOHandlerStack.Create(nil);
p.Host:=<proxy-ip>
p.port:=<proxy-port>
io.TransparentProxy:=p;
w.io:=io;
w.host:=<whois-server>
w.port:=43;
w.WHoIs(<domain>);

Отслеживая порты, он по-прежнему использует мой реальный IP-адрес для запроса.

Что я делаю не так?


person Community    schedule 30.03.2017    source источник
comment
embarcadero.newsgroups.archived.at/   -  person t1f    schedule 30.03.2017


Ответы (1)


Indy 10 изначально поддерживает два типа прокси:

  • HTTP через компонент TIdConnectThroughHttpProxy.

  • SOCKS 4/4a/5 через компонент TIdSocksInfo.

Чтобы использовать любой из них, вам необходимо:

  1. Назначьте производный от TIdIOHandlerSocket компонент, например TIdIOHandlerStack, свойству IOHandler клиента.

  2. Назначьте нужный прокси-компонент свойству TIdIOHandlerSocket.TransparentProxy, задайте для его свойств Host и Port значение Host/Port нужного прокси-сервера и включите его соответствующим образом (через свойство TIdConnectThroughHttpProxy.Enabled или TIdSocksInfo.Version).

  3. Установите свойства клиента Host и Port на хост/порт целевого сервера, а затем Connect() и используйте клиент в обычном режиме.

person Remy Lebeau    schedule 30.03.2017
comment
Я обновил свой вопрос, добавил пример, соответствующий вашему описанию, но у меня это не сработает. - person ; 31.03.2017
comment
@Softtouch, вы не устанавливаете для свойства TIdConnectThroughHttpProxy.Enabled значение true. Я обновил свой ответ. - person Remy Lebeau; 31.03.2017
comment
Спасибо. Я попытался установить enable в true, тоже не сработало. Но это сработало, когда я использую TIdConnectThroughHttpProxy.create(w) вместо TIdConnectThroughHttpProxy.create(nil), и то же самое для TIdIOHandlerStack.Create. - person ; 01.04.2017
comment
@Softtouch выбор Owner никак не влияет на работу компонентов. Он контролирует только управление памятью и ничего больше. Если вы установили ноль Owner, убедитесь, что вы Free() используете компонент после его использования. - person Remy Lebeau; 01.04.2017
comment
Тогда я уже не в курсе. Без установки владельца у меня не работает. Он использует прокси только тогда, когда я устанавливаю владельца. - person ; 03.04.2017
comment
@Softtouch, вы все равно должны установить Owner, как это принято при хорошем управлении памятью. Но на вашу проблему это никак не влияет. Код, который вы показали, в порядке, за исключением того, что в нем отсутствовало назначение TIdConnectThroughHttpProxy.Enabled. Я не могу сказать, почему он не работает без Owner, мне придется его отлаживать. Какие версии Delphi и Indy вы используете? - person Remy Lebeau; 03.04.2017
comment
извините, я идиот, я забыл упомянуть, что использую Delphi 10.2 Tokyo с предоставленными компонентами Indy. Я также использую фреймворк firemonkey, а не vcl. - person ; 03.04.2017
comment
@Softtouch, который ничего не меняет из того, что я сказал. - person Remy Lebeau; 03.04.2017