Разработать HttpClient (С++)

200 000 руб. за проект
16 декабря 2022, 13:29 • 16 откликов • 168 просмотров
  1. Пишем внешний процесс, к которому подключаемся по GRPC для выполнения запросов.
  2. Клиент должен иметь что-то типа thread pool, для обработки.
  3. Curl based http client - единственная либа которая годами поддерживается и развивается.
  4. Код должен быть кроссплатформенный (Windows, Linux)
  5. Пересобрать с boring ssl вместо openssl, чтобы TLS отпечаток был как у браузера Chrome, впоследствии желательно уметь манипулировать отпечатком. Нужно портировать код разбора JA3 hash https://github.com/Danny-Dasilva/CycleTLS для создания TLS подлюкчений с указанным JA3 hash.
  6. Передаем в приложение по GRPC запрос, который надо выполнить URL, HTTP Verb, тело запроса, заголовки, куда положить тело ответа (в файл или вернуть по grpc возможно всегда надо возвращать stream).
  7. Передаем в запрос на выполнение, ID потока, прокси который запросил, держать или нет соединение открытым, т.к. переустанавливать соединение по HTTPS дорого, но некоторые прокси имеют ограничение по количеству подключений. Нужно уметь переиспользовать тот же curl объект в рамках одного и того же задания. Неиспользуемый объект больше таймаута, должен удаляться.
  8. Добавить поддержку cookie файла https://curl.se/libcurl/c/CURLOPT_COOKIEJAR.html чтобы куки нормально таскались между запросами.
  9. Процесс должен конфигурироваться через файл конфигурации в формате json. В частности все нужные timeouts и правила обработку сертификатов, должны быть выведены в файл конфигурации.
  10. Код утилиты не должен использовать динамическую память под буфера и тому подобное в рамках запросов. Необходимо использовать общие буфера, которые аллоцировать на старте утилиты. После инициализации утилиты, не должно выделяться дополнительная память. Размеры буферов задаются в файле конфигурации.
  11. Код утилиты не должен содержать блокирующий код. Возврат на любой вызов API не должен превышать 3 секунды. Любая операция должна реагировать на отмену выполнения в течении 3х секунд.
  12. Утилита должна формировать подробный лог, привязанный к сессиям, для анализа.
  13. Весь код должен быть покрыт тестами. Тесты должны обеспечивать покрытие минимум 75% на исходном коде самой утилиты. Должны быть примеры использования утилиты через PostMan.
  14. Должен поддерживаться как минимум C++ 17. Сборки: Debug, Release, Debug Static и Release Static.
  15. Платформы Win x64, Win x86, Linux x64, Linux ARM. Windows минимально 7ка, Linux минимально Ubuntu 16.04
  16. В коде утилиты только STL и другие внешние библиотеки. Boost, POCO и другие библиотеки метапрограммирования не должны использоваться на прямую.