libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer resume, http proxy tunneling and more!
Вольный перевод:
libcurl - бесплатная и удобная клиентская библиотека для работы с протоколами FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS и FILE. Поддерживает SSL-сертификаты, HTTP POST, HTTP PUT, FTP PUT, файлы в HTTP формах, прокси, cookies, HTTP-авторизацию (Basic, digest, NTLM, kerberos v4), продолжение (resume) закачек, туннелирование трафика через HTTP-прокси, и многое другое.
С VCL не связана никак, но может потребоваться механическая доработка. Обёртка весьма занятная - 2 в 1: прямая трансляция h->pas (плюс bash-скрипт для перегенерации) и объектная надстройка. Совместима и с DCC (Delphi), и с FPC (Lazaurus).
Собственно было бы неплохо на основе этого сделать компоненты для HiAsm. В прищепке: curl.rar - минимально достаточный набор файлов обёртки (оставлены только обёртки и документация), на файлообмене - сама библиотека плюс вспомогательные библиотеки для работы с шифрованием плюс документация.
С Delphi я не дружу особо, поэтому могу только концепцию нарисовать:
1. Curl_easy:
Менеджер, интерфейс CURL_E.
При создании вызывается curl_easy_init, результат (pCURL) сохраняется для последующего использования. При удалении вызывается curl_easy_cleanup. Клиенты имеют доступ с сохранённому pCURL.
(опционально) Получение версии библиотеки через [http://curl.haxx.se/libcurl/c/curl_version_info.html]curl_version_info[/url]
2. curl_easy_setopt:
Клиент для CURL_E. Тупо набор всех опций (бОльшая часть - скрыта), кроме Callback.
3. curl_easy_perform:
Клиент для CURL_E и CURL_EFORM. Вызов одноименной функции, доступ к результату. Скорее всего, сюда придётся перенести часть опций: URL, метод, ...
4. curl_easy_getinfo:
Получение информации о результате вызова curl_easy_perform.
5. curl_formadd:
Менеджер, интерфейс CURL_EFORM.
Сборка HTTP POST-запроса. Возможно, разбить на два: curl_form [м:CURL_EFORM_INTERNAL, CURL_EFORM] (конструктор - первый вызов, деструктор - curl_formfree) и curl_form_add [к: CURL_EFORM_INTERNAL] (только добавление поля).
Если нужно - могу перевести соответствующие статьи справки на русский.