PDA

Просмотр полной версии : Подружим idhttp, idsocksinfo и idssliohandlersocketopenssl


Пуховой
16.01.2010, 12:51
Проблема работы с ssl через socks в indy наблюдается давно. Сколько бы не лазил на форумах – никому без геморроя не удавалось подружить 3 компоненты, дабы они работали более или менее корректно. Поэтому пришлось связывать самому.

Используемое:

- Delphi 2010 update 5
- Indy 10.5.7, последняя доступная ревизия
- SSL библиотеки из последних, приложу в посте

Прежде чем приведу код функции тестирования прокси для работы с ssl через socks 4/4a/5 версий, напомню, что нужно добавить в uses для использования данной функции:

- idhttp
- idcookiemanager
- idsslopenssl
- idcompressorzlib
- idsocks

idcookiemanager мы добавили на всякий случай – вдруг вы захотите проверять установку кукисов (некоторые прокси не отдают оные). idcompressorzlib – для экономии трафика (не увлекаться, даже на мощных серверах способна загрузить систему на все 120%).

function test_socks (proxyadr : string) : boolean;
var
http : tidhttp;
coo : tidcookiemanager;
ssl : tidssliohandlersocketopenssl;
compressor : tidcompressorzlib;
sock : tidsocksinfo;
begin
result := false;
coo := tidcookiemanager.create;
ssl := tidssliohandlersocketopenssl.create; ssl.ssloptions.method := sslvtlsv1; ssl.port := 443;
http := tidhttp.create; http.iohandler := ssl; http.readtimeout := 60000; http.connecttimeout := 60000; http.allowcookies := true; http.handleredirects := false; http.cookiemanager := coo; http.request.useragent := 'mozilla/4.0 (compatible; msie 7.0; windows nt 6.0)'; http.request.acceptencoding := 'gzip, deflate';
sock := tidsocksinfo.create; sock.authentication := sanoauthentication; sock.version := svsocks5; sock.host := copy (proxyadr, 1, pos (':', proxyadr) - 1); sock.port := strtoint (copy (proxyadr, pos (':', proxyadr) + 1, 5)); ssl.transparentproxy := sock;
compressor := tidcompressorzlib.create; http.compressor := compressor;
try
if pos ('О компании', http.get ('https://passport.yandex.ru/passport?mode=passport')) 0 then result := true;
except end;
http.free; coo.free; compressor.free; ssl.free; sock.free;
end;
Читать далее (http://downteam.ru/2010/01/podruzhim-idhttp-idsocksinfo-i-idssliohandlersocketopenssl.html)

оlbaneс
16.01.2010, 13:58
пух, кажись ты свой сайт пиаришь. м?

GlooK
16.01.2010, 14:22
indy не есть гуд.
максимум что себе позволяю wininet.
все остальное считаю глючным и медленным,
а что самое главное не прозрачным для понимания и разбора.

Chrome~
16.01.2010, 15:51
пух, кажись ты свой сайт пиаришь. м?
Пиарит или не пиарит, - не имеет значения.
Информация полезная.

Спасибо тебе!

Пуховой
16.01.2010, 16:58
оlbaneс, вы меня раскусили :) На самом деле - несколько раз сталкивался с подобной проблемой и с отсутствием материала / исходников по ней. Наконец решил опубликовать, чего наделал, вдруг полезно будет :)