| Booleans | Numeric | Strings | Filenames | Lists | FormData | Callbacks | Events |
Примечание: Большинство нижеприведённых свойств являются обёртками различных вызовов curl_easy_setopt().
Библиотека libcurl не предоставляет доступ "на чтение" к установленным опциям!
Обёртка tCurl хранит копию настроек для эмуляции доступа на чтение и запись, и хотя она старается инициализировать внутренние поля разумными значениями,
учитывайте, что свойство может быть "не определено" до явного присвоения ему значения.
Например, хотя дефолтное значение tCurl.Port ноль, передача по протоколу http будет пытаться использовать порт 80, если не указано обратное.
| Логические свойства |
| Числовые и перечисляемые свойства |
| Строковые свойства |
|
Примечание: Объект tCurl хранит строки в виде pchar. Доступ к свойствам организован через защищённые методы. Знайте, что в таком кода:   for i:= 1 to length(SomeCurl.URL) do SomethingWith(SomeCurl.URL[i]); - внутренние процедуры будут конвертировать весь pchar в string каждый раз, когда вы читаете один символ! Поэтому лучше использовать такой код:   Temp:=SomeCurl.URL;   for i:= 1 to length(Temp) do SomethingWith(Temp[i]); |
|
CaInfo: string Имя файла, содержащего один или несколько сертификатов для верификации. Имеет смысл только если SslVerifyPeer установлено в TRUE. Примечание для пользователей Win32: tCurl пытается инициализировать этот параметр путём поиска файла 'curl-ca-bundle.crt'. Порядок директорий, в которых происходит поиск:
|
|
CaPath: string Имя директории, содержащей набор сертификатов для верификации. Директория может быть подготовлена с помощью утилиты c_rehash из комплекта openssl. Имеет смысл только если SslVerifyPeer установлено в TRUE. Свойство CaPath не работает в Windows, в силу ограничений OpenSSL. |
|
Cookie: string Устанавливает куки для HTTP-запроса. Строка длолжна иметь вид [NAME]=[CONTENTS]; где NAME - имя cookie. |
|
CustomRequest: string Устанавливает произвольный тип HTTP-запроса (вместо стандартных GET, POST). Используется при выполнении запроса DELETE, или других более или менее редких HTTP-запросов. Перед использованием стоит удостовериться, что удалённый сервер поддерживает такой запрос! |
|
EgdSocket: string Путь к сокету Entropy Gathering Daemon (накапливающего энтропию демона). Используется при инициализации генератора случайных чисел для SSL. |
|
ErrorString: string Читаемое представление сообщения об ошибке. Может оказаться полезнее, чем просто код ошибки. Если библиотека не вернула ошибку, содержит слово "success". |
|
FtpAccount: string Когда FTP сервер запрашивает "account data" после передачи имени пользователя и пароля, библиотека отсылает эту строку как часть ACCT комманды. |
|
FtpPort: string IP адрес для комманды PORT (протокол FTP). Комманда PORT прости сервер соединиться с нами по указанному IP. Строка может содержать IP адрес, имя компьютера, имя сетевого интерфейса (в Unix) или символ '-', указывающий библиотеке использовать дефолтный IP системы. По-умолчанию все FTP операции идут в пассивном режиме, и не используют PORT. |
|
NetInterface: string Сетевой интерфейс для отправки данных. Может содержать имя интерфейса (Unix), IP адрес либо имя сервера. |
|
NetRcFile: string В Windows не используется Set this to the full path name to the file you want libcurl to use as a .netrc file. If this option is omitted, and tCurl.NetRc is TRUE, libcurl will attempt to find the .netrc file in the current user's home directory. |
|
Krb4Level: string Устанавливает уровень безопсаности протокола krb4 (Kerberos v.4), также включает использование krb4. Возможные значения: "clear" "safe" "confidential" или "private". Если переданная строка не совпадает с одной из указанных выше, то бьудет использоваться "private". Установтие это свойство равным пустой строке для отключения kerberos4. Kerberos используется только для FTP. |
|
PostFields: string POST-Данные для отправки. Это application/x-www-form-urlencoded строка, которую чаще всего и ожидают серверы. Установка этого свойства подразумевает, что планируется HTTP POST запрос. Для возврата к методу HTTP GET после установки PostFields, установите HttpGet := TRUE. Убедитесь сами, что данные форматированны именно так, как их должен получить сервер.. ( Большинство серверв ожидают url-encoded данные. ) Хотя tCurl не занимается автоматическим кодированием или конвертацией данных, можно использовать функцию класса tCurl.Escape(string) для этой цели. Для отправки данных multipart/formdata (aka rfc1867-posts), см. свойство tCurl.HttpPost . |
|
Proxy: string Устанавливает используемый HTTP прокси. Параметр должен содержать либо имя компьютера, либо IP адрес. Строка может содержать префикс протокола [protocol]:// - ибо такой префикс будет отброшен. Для указания порта добавьте :[port] к концу строки либо воспользуйтесь свойствомProxyPort. Для указания логина добавьте username:password@ перед началом строки либо воспользуйтесь свойством ProxyUserPwd При использовании HTTP прокси, libcurl будет прозрачно проводить все операции через HTTP, даже если указан протокол ('ftp://' и т.п.) в URL. Это может повлиять на список функций, которые вам доступны, например, tCurl.Quote и подобные ей FTP specifics работаюттолько при туннелировании через HTTP прокси. Такое туннелирование управляется свойством tCurl.HttpProxyTunnel. ПРИМЕЧАНИЕ: libcurl использует значения следующих переменных окружения: http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY, ALL_PROXY, NO_PROXY Если одна из этих переменных задана, то её значение будет использовано библиотекой. Свойство tCurl.Proxy имеет приоритет над переменными окружения. Чтение этого свойства не учитывает значения переменных окружения. |
|
ProxyUserPwd: string Строка вида 'username:password' для авторизации на прокси-сервере. См. tCurl.ProxyAuth для установки метода аутентификации. |
|
RandomFile: string Файл, используемый для инициализации генератора случайных чисел SSL. Чемм случайнее содержимого файла, тем защищённее будет SSL соединение. |
|
Range: string Диапазон(ы) байт для получения с сервера. Имеет вид "X-Y", где X или Y может быть опущено. Передачи по HTTP поддерживают объединение интервалов, где отдельные части разделяются запятой: "X-Y,N-M". При использовании нескольких интервалов сервер будет отправлять документ частями, используя технику MIME для разделения частей. Внимание: Не все серверы поддерживают это! |
|
Referer: string Устанавливает поле Referer: в заголовке HTTP запроса. |
|
SourceURL: string При установке включает т.н. FXP-режим (передача сервер-сервер), используя tCurl.SourceURL как источник, и tCurl.URL как цель. |
|
SourceUserPwd: string Устанавливает 'username:password' для соединения с источником в режиме FXP. ( Используйте tCurl.UserPwd для соединения с целью . ) |
|
SslCert: string Имя файла, содержащего SSL сертификат. По-умолчанию ожидается формат "PEM", указать формат можно с помощью свойства SslCertType . |
|
SslCipherList: string Строка, содержащая список алгоритмов для SSL соединения. Список должен быть синтаксически корректным, содержать не менее одного алгоритма, разделённых двоеточием. Запятые и пробелы также могут служить разделителями, но обычно используют именно двоеточие; - и + могут использоваться как операторы. Валидные примеры имён алгоритмов: 'RC4-SHA', 'SHA1+DES', 'TLSv1' и 'DEFAULT'. Значение по-умолчанию обычно устанавливается при компиляции OpenSSL. Подробнее о списках алгоритмов: http://www.openssl.org/docs/apps/ciphers.html |
|
SslEngine: string Позволяет выбрать криптоалгоритм для приватного ключа. Если такой алгоритм не поддерживается, возвращается значение CURLE_SSL_ENGINE_NOTFOUND. |
|
SslKey: string Имя файла, содержащего приватный ключ. По-умолчанию ожидается формат "PEM", указать формат можно с помощью свойства SslKeyType . |
|
SslKeyPassword: string Пароль от приватного ключа SslKey. |
|
URL: string URL запроса. ПРИМЕЧАНИЕ: Это свойство должно быть установлен до вызова tCurl.Perform. |
|
UserAgent: string Позволяет установить поле User-Agent: в HTTP запросе |
|
UserPwd: string 'username:password' используемые для соединения (т.е. для авторизации на целевом сервере - не на прокси). |
|
| Не забудьте прочитать ОСОБЫЕ ЗАМЕЧАНИЯ о колбеках, событиях, именах файлов и потоках. |
|
CookieFile: string Загружает cookie из файла (старые куки удаляются). Файл может быть в формате Netscape / Mozilla cookie или в виде дампа HTTP заголовков. Установка этого совйства автоматически устанавливает свойство tCurl.CookieJar в то же значение, если оно не было установлено ранее. См. также tCurl.CookieList |
|
CookieJar: string При установка этого свойства libcurl сохранит все cookies в указанный файл при вызове tCurl.Destroy. Если в этот момент нет cookies, то файл не создаётся. Укажите "-" для вывода списка в stdout. См. также tCurl.CookieList |
|
ErrorFile: string Имя файла для записи сообщений об ошибках При пустом имени файла или NULL данные будут выводиться в stderr. |
|
OutputFile: string Файл для записи полученных данных. При пустом имени файла или NULL данные будут выводиться в stdout. Примечание: символы конца строки на Win32 системах НЕ меняются автоматически. |
| OutputStream: pointer - См. tCurl.WriteFunction |
|
InputFile: string Файл для чтения отдаваемых данных. |
| InputStream: pointer - См. tCurl.ReadFunction |
|
HeaderFile: string Файл для записи HTTP-заголовков. |
| HeaderStream: pointer - См. tCurl.HeaderFunction |
|
|
| Свойства-колбеки (и связанные указатели на данные) |
| Не забудьте прочитать ОСОБЫЕ ЗАМЕЧАНИЯ о колбеках, событиях, именах файлов и потоках. |
|
ProgressData: pointer Указатель - первый аргумент при вызове колбека tCurl.ProgressFunction. |
|
ProgressFunction: curl_progress_callback Указатель на функцию вида : ... type curl_progress_callback = function( clientp: pointer; dltotal, dlnow, ultotal, ulnow: double ): LongInt; ... Эта функция вызывается libcurl вместо внутреннего эквивалента регулярно во время передачи данных. Неизвестные (неиспользуемые) аргументы будут имень значение ноль (например, при скачивании данных размер отданного будет 0). Возврат ненулевого значения из этого колбека заставит libcurl прервать передачу и вернуть CURLE_ABORTED_BY_CALLBACK. ПРИМЕЧАНИЕ: Установите tCurl.NoProgress:=FALSE чтобы включить этот колбек! |
|
ReadFunction: curl_read_callback Указатель на функцию вида : ... type curl_read_callback = function(ptr: pointer; size, nmemb:dword; stream:pointer):dword; cdecl; ... libcurl вызывает эту функцию, когда ей требуются данные для отдачи. Область данных, на которую указывает ptr, может быть заполнена не более чем ( size * nmemb ) байтами. Ваша функция должна вернуть число байт, записанных в память. Возврат ноля означает конец файла, это завершит текущую передачу. Аргумент stream берётся из свойства tCurl.InputStream . Note: You can also use stream for other data types, for instance: pChar( stream ) |
|
WriteFunction: curl_write_callback Указатель на функцию вида : ... type curl_write_callback = function(ptr: pointer; size, nmemb:dword; stream:pointer):dword; cdecl; ... libcurl вызывает эту функцию, когда появляются данные для записи. Размер данных по адресу ptr равен ( size * nmemb ). Верните число обработанных. Если это число отличается от числа переданных байт, это послужит сигналом ошибки, прервёт передачу и вернёт CURLE_WRITE_ERROR. Аргумент stream берётся из свойства tCurl.OutputStream . You can also use stream for other data types, for instance: pChar( stream ) NOTE: при всех вызовах вы будете получать максимальный объём данных, но вы не можете предсказать, сктолько их конкретно будет - может один байт, может один терабайт! |
|
HeaderFunction: curl_write_callback Указатель на функцию вида : ... type tCurlHeaderFunction = function(ptr: pChar; size, nmemb:dword; stream:pointer):dword; cdecl; ... Libcurl вызывает эту функцию, когда появляются данные заголовка, которые требуется записать. Заголовки гарантировано записываются один-за-другим, и только целыми строками. С помощью этой функции удобно обрабатывать заголовки. Размер данных, на которые указывает ptr, равен ( size * nmemb ). Указатель stream берётся из свойства tCurl.HeaderStream . Верните количество записанных байт, или ноль - в случае ошибки ( при этом передача будет оборвана, и будет возвращена ошибка CURLE_WRITE_ERROR ). |
|
DebugFunction: curl_debug_callback Указатель на функцию, получающую отладочную информацию, обычно выдаваемую в консоль при включенном tCurl.Verbose. Функция должна быть следующего вида: ... type curl_debug_callback = function (handle: pCurl; infotype: curl_infotype; data: pChar; size:dword; userp:pointer): LongInt; cdecl; ... Libcurl передаст одноу из следующих констант в аргументе curl_infotype: CURLINFO_TEXT, CURLINFO_HEADER_IN, CURLINFO_HEADER_OUT, CURLINFO_DATA_IN, CURLINFO_DATA_OUT, CURLINFO_SSL_DATA_IN, CURLINFO_SSL_DATA_OUT. Примечание: Эта функция должна вернуть 0. |
|
DebugData: pointer Указатель на произвольные данные. Этот указатель будет последним аргументом колбека tCurl.DebugFunction . |
|
IoCtlFunction: curl_ioctl_callback Эта функция вызывается libcurl для специальных I/O операций, которые libcurl сама сделать не может. На данный момент, единственная такая операция - перемотка потока. Перемотка входного (read) потока данных может потребоваться при операциях HTTP PUT или POST с многопроходной аутентификацией. Функция должна иметь следующиу вид: curl_ioctl_callback = function (handle:pCURL; cmd:longint; clientp:pointer):curlioerr; cdecl; |
|
IoCtlData: pointer Указатель на произвольные данные. Этот указатель будет третьим аргументом колбека tCurl.IoCtlFunction. |
|
SslCtxFunction: curl_ssl_ctx_callback Указатель на функцию вида : curl_ssl_ctx_callback = function (curl:pCURL; ssl_ctx:pointer; userptr:pointer):CURLcode; cdecl; libcurl вызывает эту функцию перед самым актом установления SSL-соединения, после обработки всех остальных SSL-опций. Цель этой функции - дать приложению последнюю возможность изменть ход инициализации OpenSSL. Параметр ssl_ctx является указателем на openssl структуру SSL_CTX. Аргумент userptr берётся из свойства SslCtxData . Если произошла ошибка, то попытка установить соединение не происходит, и свойство ResultCode будет содерждать код ошибки из этого колбека. Использование этой функции позволяет, например, использовать openssl-евские колбеки для добавления дополнительной валидации сертификатов, и даже изменить действующую URI запроса HTTPS . ПРИМЕЧАНИЕ: Для использования этого свойства необходимы глубокие познания в области работы библиотеки openssl. Хотите знать больше? Курите маны по libcurl и openssl! |
|
SslCtxData: pointer Указатель, передаваемый колбеку SLL контекста SslCtxFunction . Этот параметр используется в качестветретьего аргумента ( NIL по-умолчанию ). |
|
События, описанные ниже, являются обёртками колбеков, описанных выше. В зависимости от модели программирования, вы выберете либо события, либо колбеки,
от смешивания их ничего хорошего не выйдет! В общем случае, события рсчитаны на компонентные оконные приложения, а колбеки - на консольные, в которых нет "родительского" объекта. |
| Events |
|
OnDebug: tCurlDebugEvent Предоставляет доступ "только для чтения" к данным и информации о соединении. Метод должен иметь вид: ... type tCurlDebugEvent = procedure( Sender:tObject; infotype:CurlInfoType; data:pChar; len:dword; var bContinue:boolean ); ... Libcurl передаст одну из следующих констант в параметре infotype :
Использование этого события автоматически устанавливает tCurl.Verbose в TRUE. | ||||||||||||||
|
OnProgress: tCurlProgressEvent Метод должен иметь вид: ... type tCurlProgressEvent = procedure(Sender:tObject; BytesTotal, BytesNow:longint; var bContinue:Boolean); ... Так как одна из пар значений - ( dl_total/dl_now ) или ( ul_total/ul_now ) - в tCurl.ProgressFunction будет (в общем случае) возвращать ноль/ноль, процедура OnProgress получит только ту пару, которая в данный момент валидна, в зависимости от направления потока данных. Установка bContinue в FALSE вызовет обрыв передачи библиотекой, и приведёт к возврату CURLE_ABORTED_BY_CALLBACK. Использование этого события автоматически установит tCurl.NoProgress в FALSE. | ||||||||||||||
|
OnHeader: tCurlHeaderEvent Событий происходит при каждом получении libcurl заголовка ответа. Метод должен иметь следующий вид: ... type tCurlHeaderEvent = procedure(Sender:tObject; data:string; var bContinue:Boolean); ... Поля заголовка передаются по одному на событие, концевые переносы строк удалены. ( Последнее поле заголовка в HTTP ответе будет пустой строкой. ) Установка bContinue в FALSE вызовет обрыв передачи библиотекой, и приведёт к возврату CURLE_WRITE_ERROR. Не забудьте прочитать ОСОБЫЕ ЗАМЕЧАНИЯ о колбеках, событиях, именах файлов и потоках. | ||||||||||||||
|
OnReceive: tCurlReceiveEvent Это событие произойдёт когад libcurl получит входящие данные, которые ваша процедура должна обработать. Метод должен иметь следующий вид: ... type tCurlReceiveEvent = procedure(Sender:tObject; data:pointer; len:dword; var bContinue:Boolean); ... при всех вызовах вы будете получать максимальный объём данных, но вы не можете предсказать, сктолько их конкретно будет - может один байт, может один терабайт! Установка bContinue в FALSE вызовет обрыв передачи библиотекой, и приведёт к возврату CURLE_WRITE_ERROR. Не забудьте прочитать ОСОБЫЕ ЗАМЕЧАНИЯ о колбеках, событиях, именах файлов и потоках. | ||||||||||||||
|
OnTransmit: tCurlTransmitEvent Это событие произойдёт, когад библиотеке понадобятся данные для отправки. Метод должен иметь вид: ... type tCurlTransmitEvent = procedure(Sender:tObject; data:pointer; var len:dword); ... Область памяти, на которую указывает data, может принять не более len байт. Установка len в 0 служит сигналом конца файла, и завершает текущую передачу. Не забудьте прочитать ОСОБЫЕ ЗАМЕЧАНИЯ о колбеках, событиях, именах файлов и потоках. | ||||||||||||||
|
OnListCookies: tCurlListCookiesEvent Процедура ListCookies перебирает список tCurl.CookieList, вызывая OnListCookies один раз для каждого cookie. Параметр Sender содержит указатель на экземпляр tCurl, вызвавший процедуру, параметр Data - текст cookie. Установка bContinue в FALSE из обработчика останавливает перебор cookies. Note: For reasons beyond the scope of this document, it is simply not practical to provide random-access to the list, for instance through a TStringList or similar. The only efficient and reliable way to access the cookie list is sequentially, starting at the top. This type of cookie support is relatively new to both CurlPas and libcurl, and might be subject to change in the not-so-distant future. |