Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> новый HTTP клиент на WinInet, HTTP клиент TMFWIHTTP 
:(
    Опции темы
MetalFan
Дата 12.12.2007, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 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. Так же присутствует класс-менеджер системного кэша ослика, с возможностью работы только с печеньем.
Пример использования:
Код

var
  lMFHTTP: TMFWICustomHTTP;
begin
  lMFHTTP := TMFWICustomHTTP.Create( nil );
  try
    lMFHTTP.RequestHeaders.AcceptCharset := 'windows-1251';
    lMFHTTP.RequestParams := lMFHTTP.RequestParams + [hrfReload];
    mem.Lines.Text := lMFHTTP.Get(edtUrl.Text);
    memHdr.Text := lMFHTTP.ResponseHeaders.RawHeaders.Text;
  finally
    lMFHTTP.Free;
  end;

Содержание аттача:
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 )
Присоединённый файл  MFWIHTTP_0.0.1.11.rar 37,43 Kb


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
aktuba
Дата 12.12.2007, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 9
Всего: 38



Как я понимаю, из отличий от Indy, только работа с https... Или еще что-то?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MetalFan
Дата 12.12.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 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...
PM MAIL   Вверх
MetalFan
Дата 13.12.2007, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



что-то совсем нет желающих потестить   smile 
видимо народу это не интересно.  smile 

В новой версии добавлен контроль за скоростью и ее определение.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
zer0c0o1
Дата 14.12.2007, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



очень интересен компонент покажи на примере как взять с хттпс урл через сокс5
PM MAIL   Вверх
MetalFan
Дата 14.12.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



дай пример сокс5 прокси и страничку, которую надо взять) покажу. 5 строк кода)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
zer0c0o1
Дата 14.12.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
MetalFan
Дата 15.12.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



мда, нашел в инете ответ. к сожалению WinInet SOCKS прокси поддерживает только 4е...
ибо в мелкософте считают:
Цитата
SOCKS is not a widely used protocol


но и с 4й версией я что-то не нашел 100% работающей прокси, чтобы протестить...

Это сообщение отредактировал(а) MetalFan - 15.12.2007, 09:42


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 15.12.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Ммм вот эти строки (TMFWICustomHTTP)
Код

    //events redirectors
    var
      FLastWorkPos: Int64;
      FStartWorkTime: Cardinal;
    //
    var
      FRequestHdrs: TMFWinInetRequestQueryInfo;
      FResponseHdrs: TMFWinInetRequestQueryInfo;

Лучше вверх подвинуть, ато у меня в Delphi 7 некомпилится если они посередине методов вписаны (это скорей изза версии). А если наверх перетянуть (до методов) то компилится.
И еше 
Цитата

Error reading form.
Свойство pbar.ExplicitLeft


Это сообщение отредактировал(а) Ak47black - 15.12.2007, 15:54
PM MAIL   Вверх
MetalFan
Дата 15.12.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



мда, не подумал про младшие версии(<D2006), сорь. в след.версии подправлю! спасибо!


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Bodrox
Дата 9.1.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 14.4.2004
Где: Чебоксары

Репутация: нет
Всего: нет



Затестим! Давно хотел клиента для https написать smile.
PM MAIL   Вверх
morlock
Дата 19.2.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.2.2008

Репутация: нет
Всего: нет



Добрый день! Пробую воспользоваться вашим HTTP клиентом.. При попытке отправить POST на url типа http://site.coom/script.php?a=1&b=2&q=45 компонент просто отрубает то что идет после '?' и отправляет просто на script.php
PM MAIL   Вверх
SneG0K
Дата 21.2.2008, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Хм... Хорошая компонента smile 
MetalFan, молодец... 
PM WWW Skype   Вверх
VolRus
Дата 1.12.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: 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'

PM MAIL   Вверх
MetalFan
Дата 1.12.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



VolRus, не будет, ибо:
1. нет Д7
2. нет времени
3. "адаптировать" там элементарно, если конечно сильно надо.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1002 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.