•  

ГлавнаяIndyЧастые вопросы по Indy → Используя PROXY соединиться с сайтом и получить код страницы

Создано: 03.06.2014 20:10:03 · Исправлено: 03.06.2014 20:10:03 · Прочтений: 584

Столкнулся с непонятной мне загвоздкой при использовании IDHTTP (indy)

Задача: используя PROXY соединиться с yandex.ru и получить собственно код страницы

Загвоздка: при использовании мертвых прокси (для теста 123.123.123.123:12345) IDHTTP вылетает с исключением как и положено. Это нормально. НО! при использовании некоторых проксей, например 24.205.59.40:32354 (на данный момент 24.205.59.40 пингуется) компонент не то что не вылетает с исключением, но даже по окончании connectTimeout/readTimeout продолжает грузить страницу, занимая при этом 100% ресурсов ЦП Оо

можете сами попробовать, я крайне удивлен Оо

uses IDHTTP;

function page(aproxy:string;aport:integer):string;
var http:TIDHTTP;
    html:string;
begin;
http:=TIDHTTP.create;
http.HandleRedirects:=true;
http.ConnectTimeout:=3000;
http.readTimeout:=3000;
http.ProxyParams.ProxyServer:=aproxy;
http.ProxyParams.ProxyPort:=aport;

try
html:=http.get(http://ya.ru);
except;
end;

http.free;
end;


//при нажатии этой кнопки все зависает и процессор забит на 100%
procedure Twin.Button1Click(Sender: TObject);
begin
page(,24.205.59.40,32354);
end;

//при нажатии этой кнопки прога думает положенные 3000мсек
//и вылетает с исключением типа мертвая прокся
procedure Twin.Button2Click(Sender: TObject);
begin
page(,123.123.123.123,30777);
end;
Блин, там в событиях нажатия кнопки не нужен первый аргумент, это я сохранился не вовремя)
но в целом вопрос актуален
отмечу еще одно наблюдение: пробовал смотреть WireSharkом (снифер), какие пакеты отсылает компонент этой злосчастной проксе и что она отвечает..но...тишина!
Прога просто зависает, жрет 100% ЦП и ничего в инет не шлет..отсюда делаю вывод, что где-то зацикливается код компонента еще до отправки пакета...но как узнать где Оо
решения не нашел. переделал все на компонент THTTPCLI