Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Подружим idhttp, idsocksinfo и idssliohandlersocketopenssl (https://forum.antichat.xyz/showthread.php?t=171311)

Пуховой 16.01.2010 12:51

Подружим idhttp, idsocksinfo и idssliohandlersocketopenssl
 
Проблема работы с 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;

Читать далее

оlbaneс 16.01.2010 13:58

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

GlooK 16.01.2010 14:22

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

Chrome~ 16.01.2010 15:51

Цитата:

Сообщение от оlbaneс
пух, кажись ты свой сайт пиаришь. м?

Пиарит или не пиарит, - не имеет значения.
Информация полезная.

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

Пуховой 16.01.2010 16:58

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


Время: 17:54