![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
Выношу на ваш суд свое творение: HTTP-клиент основанный на WinInet.
История: после исследования и приобретения опыта использования уже существующих наборов компонент(Indy, SwinHTTP, Alcinoe, ICS) для работы с сетью, а в частности работы с http, решил под свои задачи написать что-то свое. Сначала были написаны классы-обертки над основными функциями из WinInet для работы c http-запросами (InternetOpen, InternetConnect, HTTPOpenRequest, etc), затем создан класс инкапсулирующий в себе работу с этими классами, внешний интерфейс которого напоминает idHTTP Требования: 1. Умение работать с https без дополнительных библиотек и извратов. 2. Умение отправлять пост-запросом произвольные данные, в т.ч. файлы. 3. Простота в использовании. Характеристики: 1. Синхронный. 2. Отправка GET,POST,HEAD запросов 3. Возможность отправки TStream в Post-запросе, повзаимствован класс TIdMultipartFormData. 4. Соединение на основе системных настроек, через прокси и "напрямую". 5. Отключение использования системной базы печенья, отключение редиректов. 6. Автоматическое определение https запроса, игнор "кривых" сертификатов безопасности 7. События OnStatus, OnError, OnWorkBegin, OnWorkEnd, OnWork 8. Так же присутствует класс-менеджер системного кэша ослика, с возможностью работы только с печеньем. Пример использования:
Содержание аттача: Example - содержит примитивное приложение с примерами использования как оберток, так и самого компонента Source\Classes - содержит класс-менеджер оберток, собственно клиент http Source\IndyUtils - в 2х модулях пара классов и десяток функций, повзаимствованных из Indy Source\Wrappers - модули с классами-обертками над вышеупомянутыми функциями WinInet Планы по развитию компонент: 1. Создание асинхронного аналога 2. Добавление опции, задающей макс. входящую / исходящую скорость соединения 3. Что-нибудь еще) Жду конструктивной критики, предложений, замечаний, найденных багов wbw, MetalFan History 0.0.1.11: + Добавлена возможность ограничение скорости (SendBytesPerSec,RecvBytesPerSec) + Добавлена св-во со значением текущей скорости ConnectionSpeed. Это сообщение отредактировал(а) MetalFan - 13.12.2007, 01:28 Присоединённый файл ( Кол-во скачиваний: 434 ) ![]() -------------------- There are always someone smarter than you... |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 9 Всего: 38 |
Как я понимаю, из отличий от Indy, только работа с https... Или еще что-то?
-------------------- ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
Отличия...
1. для поддержки печенек не нужно доп.телодвижений. AllowCookies по умолчанию вкл. 2. https, как ты раньше сказал 3. Простота в использовании 4. размер. компактный, как и SwinHTTP. пустой проект с формой в bds2006 - 393Kb форма с idHTTP (без дополнений в виде TIdCookieManager, TIdSSLIOHandler.... ) - 583 (+291Kb) форма с использованием компонента на основе WinInet - 417Kb (+24Kb). в дальнейшем будут еще различия: 5. "встроенное" в компонент ограничение скорости 6. Асинхронность с использованием возможностей WinInet -------------------- There are always someone smarter than you... |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
что-то совсем нет желающих потестить
![]() видимо народу это не интересно. ![]() В новой версии добавлен контроль за скоростью и ее определение. -------------------- There are always someone smarter than you... |
|||
|
||||
zer0c0o1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
очень интересен компонент покажи на примере как взять с хттпс урл через сокс5
|
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
дай пример сокс5 прокси и страничку, которую надо взять) покажу. 5 строк кода)
-------------------- There are always someone smarter than you... |
|||
|
||||
zer0c0o1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
В indy socks5 я реализовывал вот так:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdSocks, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP; type TForm1 = class(TForm) Button1: TButton; IdHTTP1: TIdHTTP; IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocket; IdSocksInfo1: TIdSocksInfo; procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin IdSocksInfo1.Version:=svSocks5; IdSocksInfo1.host:='211.116.254.203'; IdSocksInfo1.Port:=2753; IdSSLIOHandlerSocket1.SSLOptions.Method:=sslvSSLv23; IdSSLIOHandlerSocket1.SocksInfo:=IdSocksInfo1; IdHTTP1.IOHandler:=IdSSLIOHandlerSocket1; IdHTTP1.Get('https://www.sait.ru/'); end; end. |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
мда, нашел в инете ответ. к сожалению WinInet SOCKS прокси поддерживает только 4е...
ибо в мелкософте считают:
но и с 4й версией я что-то не нашел 100% работающей прокси, чтобы протестить... Это сообщение отредактировал(а) MetalFan - 15.12.2007, 09:42 -------------------- There are always someone smarter than you... |
|||
|
||||
Ak47black |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Ммм вот эти строки (TMFWICustomHTTP)
Лучше вверх подвинуть, ато у меня в Delphi 7 некомпилится если они посередине методов вписаны (это скорей изза версии). А если наверх перетянуть (до методов) то компилится. И еше
Это сообщение отредактировал(а) Ak47black - 15.12.2007, 15:54 |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
мда, не подумал про младшие версии(<D2006), сорь. в след.версии подправлю! спасибо!
-------------------- There are always someone smarter than you... |
|||
|
||||
Bodrox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 14.4.2004 Где: Чебоксары Репутация: нет Всего: нет |
Затестим! Давно хотел клиента для https написать
![]() |
|||
|
||||
morlock |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 18.2.2008 Репутация: нет Всего: нет |
Добрый день! Пробую воспользоваться вашим HTTP клиентом.. При попытке отправить POST на url типа http://site.coom/script.php?a=1&b=2&q=45 компонент просто отрубает то что идет после '?' и отправляет просто на script.php
|
|||
|
||||
SneG0K |
|
|||
![]() Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 2 Всего: 54 |
Хм... Хорошая компонента
![]() MetalFan, молодец... |
|||
|
||||
VolRus |
|
|||
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 1 Регистрация: 29.7.2008 Репутация: нет Всего: 1 |
У меня delphi 7. Будет ли адаптированая версия?
//events redirectors var FLastWorkPos: Int64; FStartWorkTime: Cardinal; Build [Error] WinInet_MFHTTP.pas(79): 'END' expected but 'VAR' found [Error] WinInet_MFHTTP.pas(116): Unknown directive: 'public' [Error] WinInet_MFHTTP.pas(117): Undeclared identifier: 'Create' [Error] WinInet_MFHTTP.pas(117): Unknown directive: 'override' [Error] WinInet_MFHTTP.pas(118): Undeclared identifier: 'Destroy' [Error] WinInet_MFHTTP.pas(120): Declaration expected but 'PROPERTY' found [Error] WinInet_MFHTTP.pas(169): Declaration expected but 'PROPERTY' found [Error] WinInet_MFHTTP.pas(183): 'IMPLEMENTATION' expected but ';' found [Error] WinInet_MFHTTP.pas(185): '.' expected but 'IMPLEMENTATION' found [Error] WinInet_MFHTTP.pas(26): Unsatisfied forward or external declaration: 'TMFProxyParams.GetProxy' [Hint] ..... .... [Error] WinInet_MFHTTP.pas(82): Unsatisfied forward or external declaration: 'Delay' [Error] WinInet_MFHTTP.pas(83): Unsatisfied forward or external declaration: 'CheckSpeedLimit' [Error] WinInet_MFHTTP.pas(84): Unsatisfied forward or external declaration: 'UpdateSpeed' [Error] WinInet_MFHTTP.pas(85): Unsatisfied forward or external declaration: 'OnInternalStatus' [Error] WinInet_MFHTTP.pas(86): Unsatisfied forward or external declaration: 'OnInternalWorkBegin' [Error] WinInet_MFHTTP.pas(87): Unsatisfied forward or external declaration: 'OnInternalWork' [Error] WinInet_MFHTTP.pas(88): Unsatisfied forward or external declaration: 'OnInternalWorkEnd' [Error] WinInet_MFHTTP.pas(89): Unsatisfied forward or external declaration: 'GetResponseHeaders' [Error] WinInet_MFHTTP.pas(90): Unsatisfied forward or external declaration: 'GetProxyParams' [Error] WinInet_MFHTTP.pas(91): Unsatisfied forward or external declaration: 'GetVersion' [Error] WinInet_MFHTTP.pas(94): Unsatisfied forward or external declaration: 'GetRequestHeaders' [Error] WinInet_MFHTTP.pas(96): Unsatisfied forward or external declaration: 'CreateSession' [Error] WinInet_MFHTTP.pas(99): Unsatisfied forward or external declaration: 'CreateConnection' [Error] WinInet_MFHTTP.pas(103): Unsatisfied forward or external declaration: 'CreateRequest' [Error] WinInet_MFHTTP.pas(104): Unsatisfied forward or external declaration: 'FreeRequest' [Error] WinInet_MFHTTP.pas(106): Unsatisfied forward or external declaration: 'DoPrepareRequest' [Error] WinInet_MFHTTP.pas(107): Unsatisfied forward or external declaration: 'DoSendRequest' [Error] WinInet_MFHTTP.pas(108): Unsatisfied forward or external declaration: 'DoGetResponse' [Error] WinInet_MFHTTP.pas(110): Unsatisfied forward or external declaration: 'DoGet' [Error] WinInet_MFHTTP.pas(112): Unsatisfied forward or external declaration: 'DoPost' [Error] WinInet_MFHTTP.pas(114): Unsatisfied forward or external declaration: 'DoHead' [Error] WinInet_MFHTTP.pas(117): Unsatisfied forward or external declaration: 'Create' [Error] WinInet_MFHTTP.pas(118): Unsatisfied forward or external declaration: 'Destroy' [Error] WinInet_MFHTTP.pas(153): Unsatisfied forward or external declaration: 'Get' [Error] WinInet_MFHTTP.pas(154): Unsatisfied forward or external declaration: 'Get' [Error] WinInet_MFHTTP.pas(155): Unsatisfied forward or external declaration: 'Get' [Error] WinInet_MFHTTP.pas(156): Unsatisfied forward or external declaration: 'Get' [Error] WinInet_MFHTTP.pas(158): Unsatisfied forward or external declaration: 'Post' [Error] WinInet_MFHTTP.pas(159): Unsatisfied forward or external declaration: 'Post' [Error] WinInet_MFHTTP.pas(160): Unsatisfied forward or external declaration: 'Post' [Error] WinInet_MFHTTP.pas(161): Unsatisfied forward or external declaration: 'Post' [Error] WinInet_MFHTTP.pas(162): Unsatisfied forward or external declaration: 'Post' [Error] WinInet_MFHTTP.pas(163): Unsatisfied forward or external declaration: 'Post' [Error] WinInet_MFHTTP.pas(165): Unsatisfied forward or external declaration: 'Head' [Fatal Error] WinInet_GetTestDlg.pas(7): Could not compile used unit '..\..\Source\Classes\WinInet_MFHTTP.pas' |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
VolRus, не будет, ибо:
1. нет Д7 2. нет времени 3. "адаптировать" там элементарно, если конечно сильно надо. -------------------- There are always someone smarter than you... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |