xNet - библиотека классов для .NET Framework ОБЩИЕ СВЕДЕНИЯ ЯП: C# Версия: 3.0 Версия .NET: 4.0 Client Profile Документация: XML на русском Исходный код: github.com/X-rus/xNet Актуальная информация: habrahabr.ru/post/146475/ ОПИСАНИЕ xNet - это библиотека классов для .NET Framework, которая включает в себя: Классы для работы с прокси-серверами: HTTP, Socks4(a), Socks5, Chain. Классы для работы с HTTP 1.0/1.1 протоколом: keep-alive, gzip, deflate, chunked, SSL, прокси и другое. Классы для работы с многопоточностью: многопоточный обход коллекции, асинхронные события и другое.
т.е. автор ты? я могу поучавствовать и вообще заценить сорсы, когда отрезвею В общем стукни в аську 1501075, хочу принять участие
При работе с CONNECT проксиком надо посылать "Proxy-Connection: keep-alive". А по сабжу много чего лишнего, профилирования делал? Как ведет себя скажем на потоках 200-500?
Спасибо за подсказку. Наверное, сделаю так, если в HttpRequest стоит KeepAlive = true и используется HttpProxy, то будет отправляться заголовок "Proxy-Connection: keep-alive". Я ещё вот думаю насчёт аутентификации на HttpProxy. На данный момент, если она нужна, то при подключение к прокси-серверу, отправляется команда CONNECT, с параметрами аутентификации, но ведь прокси-сервер может не поддерживать метод CONNECT. Лучше тогда сделать, чтобы при каждом запросе к прокси серверу, отправлялись данные аутентификации? Почему же? Я все эти классы, так или иначе, использую. Нет.
Нет, видать ты меня не совсем правильно понял, Proxy-Connection: keep-alive нужно отправлять самому прокси серверу в обязательном порядке, если этого не делать то прокси сервер тупо закрывает конект и писать HTTP запрос в socket уже бесполезно, столкнулся с этим когда юзал http://www.starksoft.com/prod_proxy.html да и когда писал свой класс, то есть:
Аа. Эта проблема у меня решена. HttpRequest проверяет заголовки на наличие Connection: close или Proxy-Connection: close. Именно их посылают, если хотят закрыть соединение. И, если они присутствуют, то автоматически вызывается метод Dispose (для закрытия соединения), и при следующем запросе создаётся новое соединение.
Рекомендую побольше использовать методы-расширения для интерфейсов (отличный пример как это в System.Linq сделано) Напрмиер: Code: static public void SaveToFile(this IEnemurable<string> source, string fileName); А вызывать так: Code: var list = new List<string>(); ...... list.SaveToFile("test.txt"); Идея понятна? Просто код так почитабельнее выглядит, чем вызовы статических методов
Ну, я их и так использовал по возможности. Примеры: Code: public static string[] Substrings(this string str, string left, string right, StringComparison comparsion) public static string GetNodeValue(this XmlDocument xmlDocument, string xpath) Новое, достаточно весомое, обновление библиотеки. Все подробности расписаны в документации. Версия 1.1.0 В классе AsyncEvent обновлён метод AsyncCall. В класс MultiThreading добавлено новое событие - CancelingWork. Добавлено новое исключение - NetException. Теперь от него наследуются HttpException и ProxyException. Класс ProxyClient реализует интерфейс IEquatable и переопределяет стандартные методы object. В HttpProxyClient доработан метод подключения к серверу. HttpHeaders и HttpCookies теперь наследуются от SortedDictionary. В HttpResponse добавлен индексатор для доступа к HTTP-заголовкам. Из HttpResponse убраны свойства Content-Length, Content-Encoding и Content-Type. Из HttpRequest убрано свойство Accept. В HttpRequest добавлено автоопределение кодировки. В HttpRequest добавлена поддержка Basic-авторизации. В HttpRequest улучшены методы загрузки страниц, в особенности страниц неизвестной длинны. В HttpRequest добавлена дополнительная поддержка протокола HTTP 1.0. Теперь, при KeepAlive = true, отправляется заголовок Connection: keep-alive, а при использование HTTP-прокси, отправляется Proxy-Connection: keep-alive. И другие внутренние доработки. Данное обновление в основном коснулось классов из xNet.Threading. Все подробности расписаны в документации. Версия 1.1.3 Доработан класс MultiThreading. Полностью переделан класс AsyncEvent. Добавлены методы расширения для классов DirectoryInfo и FileInfo. В классы Synchronized и SynchronizedRW добавлен метод SetAndGetValue. Класс SynchronizedRW реализует интерфейс IDisposable, и добавлен метод CreateLock. Методы UrlDecode и UrlEncode в классе HttpUtility, теперь используют по-умолчанию кодировку UTF8. Добавлен перегруженный метод MultiFormDataFile в класс HttpMime, который самостоятельно загружает данные из файла. Добавлены перегруженные методы Post в классы HttpRequest и HttpClient, которые позволяют отправлять 'сырые' данные HTTP-серверу.
Сайт временно закрыт. Уже есть тестовая версия второй части библиотеки. Там всё было переписано и добавлено новое. Версия 1.9.2: http://rghost.ru/25631501 Пример: Code: using (HttpRequest request = new HttpRequest()) { request.UserAgent = HttpHelper.RandomUserAgent(); request.Proxy = Socks5ProxyClient.Parse("127.0.0.1:1080"); StringDictionary reqParams = new StringDictionary(); reqParams["username"] = HttpHelper.UrlEncode("USERNAME"); reqParams["password"] = HttpHelper.UrlEncode("PASSWORD"); string content = request.Post("http://microsoft.com/hack.php", reqParams).LoadText(); string secretHash = content.Substring("secret_hash=\"", "\""); secretHash = HtmlHelper.ReplaceEntities(secretHash); } Для загрузки тела сообщения, нужно использовать три метода: LoadBytes, LoadText или Ignore. Остальное можно почитать в документации, особенно следует читать Remarks (заметки). О всех ошибках и недачётах желательно сообщать мне. Релиз 2.0 уже доступен, смотрите первый пост. Также, смотрите мой блог, там есть статьи по xNet. Библиотека обновлена до версии 2.1.1. Ещё появилась новая библиотека для работы с Вконтакте API и статья по работе с ней, и не только: Работа с Вконтакте API & Файлообменник Вконтакте Теперь исходный код библиотеки доступен на GitHub: https://github.com/X-rus/xNet Дополнительную информацию о библиотеки можете получить на моём сайте.
Актуальная информация о библиотеки теперь находится здесь - habrahabr.ru/post/146475/ А исходный код здесь - github.com/X-rus/xNet Вышла новая версия: 3.0 Были удалены лишние классы и доработаны старые. Добавлена поддержка подключений через цепочку из проксей. Расширены возможности работы с HTTP. Ну и ещё всякое. Статья на хабре была обновлена. Там есть вся необходимая информация.
Тихий ужас... читать классиков программирования "Шаблоны проектирования" Банды Четырех и "Рефакторинг" Мартина Фаулера, может тогда ситуация исправиться, эти исходники можно выкинуть на помойку т. к. поддерживать их сможет только автор и никто другой