Это Delphi и объект Pascal привязки и обертка вокруг библиотеки завивки. Libcurl - это библиотека используется для передачи данных, указанных с помощью синтаксиса URL, поддержки HTTP, HTTPS, FTP, FTPS, Gopher, TFTP, SCP, SFTP, SMB, Telnet, DICT, LDAP, LDAP, File, IMAP, SMTP, POP3, RTSP и RTMP.
Библиотека проверяется на
Получите источники и добавьте исходный каталог в путь поиска проекта. Для FPC добавьте исходный каталог в файл FPC.CFG .
Клон репозиторий git clone https://github.com/isemenkov/libpascurl .
Добавьте блок, который вы хотите использовать в пункт « uses .
Файл libpascurl.pas содержит переведенные заголовки Curl для использования этой библиотеки в программах Pascal. Вы можете найти документацию по API на веб -сайте Curl.
uses
libpascurl;
var
handle : CURL;
effectiveUrl, contentType, ip : PChar;
responseCode, headerSize : Longint;
contentLength, totalTime : Longword;
buffer : TStringStream;
function WriteFunctionCallback (ptr : PChar; size : LongWord;
nmemb : LongWord; data : Pointer)
begin
buffer.WriteString(string(ptr));
end ;
begin
curl_global_init(CURL_GLOBAL_ALL);
curl_easy_setopt(handle, CURLOPT_URL, PChar( ' https://example.dev ' );
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, @WriteFunctionCallback);
buffer := TStringStream.Create( ' ' );
if curl_easy_perform = CURLE_OK then
begin
New(effectiveUrl);
New(contentType);
New(ip);
curl_easy_getinfo(handle, CURLINFO_EFFECTIVE_URL, @effectiveUrl);
curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, @responseCode);
curl_easy_getinfo(handle, CURLINFO_HEADER_SIZE, @headerSize);
curl_easy_getinfo(handle, CURLINFO_CONTENT_TYPE, @contentType);
curl_easy_getinfo(handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, @contentLength);
curl_easy_getinfo(handle, CURLINFO_LOCAL_IP, @ip);
curl_easy_getinfo(handle, CURLINFO_TOTAL_TIME_T, @totalTime);
writeln( ' URL: ' : 20 , effectiveUrl);
writeln( ' Response code: ' : 20 , responseCode);
writeln( ' Header size, kB: ' : 20 , FormatFloat( ' 0.00 ' , headerSize / 1024 ));
writeln( ' Content type: ' , contentType);
writeln( ' Content length, kB: ' : 20 , FormatFloat( ' 0.00 ' , contentLength / 1024 ));
writeln( ' IP: ' : 20 , ip);
writeln( ' Total time, ms: ' : 20 , totalTime);
writeln( ' ==== Content ==== ' );
writeln(buffer.DataString);
end ;
curl_global_cleanup;
end ; Библиотека содержит набор классов для создания обертка высокого уровня вокруг поддерживаемых протоколов. source/curl/ папка содержит базовые компоненты, которые реализуют конкретную функциональность.
| Сорт | Описание |
|---|---|
| Tcurleasy | Это базовый класс, который инициализирует библиотеку сгиба и обеспечивает функциональность обработки ошибок. |
| TSESSION | Это родительский класс для сеансов всех поддерживаемых протоколов. Он предоставляет TmemoryBuffer для сохраненной загрузки/загрузки данных. |
| Затягивание | Это родительский класс для данных ответа на сервер. |
| Tpropertymodule | Это базовый класс для всех сеансов и отвечает на дополнительные функциональные модули. |
| Модульный класс | Описание |
|---|---|
| Tmoduledns | Класс обеспечивает свойства для настройки опций Libcurl DNS. |
| TmoduleRequest | Класс обеспечивает свойства для настройки свойств запроса и обратных вызовов. |
| Tmoduleheader | Класс обеспечивает свойства для настройки заголовков. Может использоваться только с HTTP -подобными протоколами - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| Tmoduleoptions | Класс обеспечивает свойства для настройки различных внутренних опций Libcurl. |
| Tmoduleprotocols | Класс обеспечивает свойства для настройки вариантов протокола Libcurl. |
| Tmodulesocke | Класс обеспечивает свойства для настройки розетки. |
| Tmoduletcp | Класс обеспечивает свойства для настройки параметров протокола TCP. |
| Tmodulewriter | Класс предоставьте свойства для настройки функции обратного вызова. |
| Tmodulereader | Класс обеспечивает свойства для настройки функции обратного вызова загрузки. |
| Tmoduleauth | Класс обеспечивает свойства для настройки параметров авторов. |
| Tmoduletlsauth | Класс обеспечивает свойства для настройки параметров аутентификации TLS Auth. |
| Tmoduleproxy | Класс обеспечивает свойства для настройки параметров прокси. |
| Tmodulesock5 | Класс обеспечивает свойства для настройки параметров прокси. Sock5. |
| Модульный класс | Описание |
|---|---|
| TmoduleContent | Класс обеспечивает свойства для получения буфера данных контента. |
| Tmoduleheader | Класс обеспечивает свойства заголовкам ответов. Может использоваться только с HTTP -подобными протоколами - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| Tmoduleredirect | Класс предоставьте информацию о перенаправлении запросов. |
| TmodulSpeed | Класс предоставлена скорость скачать/загрузить информацию. |
| Tmoduletimeout | Класс предоставлена информация о тайм -аутах. |
| Tmoduleinfo | Класс предоставьте информацию о сеансе. |
THTTPSession и THTTPResponse Classe реализует обертку о протоколе HTTP (S). Эти классы расширяют функциональность базовых классов и предоставляют новый, который является специфическим только для этого протокола.
Эта обертка использовала или расширяет следующие основные модули:
| Сессионные модули | Модули ответа |
|---|---|
| ✔ Tmoduledns | ✔ TmoduleContent |
| ✔ TmoduleHeader | ✔ TmoduleHeader |
| ✔ Tmoduleoptions | ✔ tmoduleredIrect |
| ✔ Tmoduleprotocols | ✔ TmodulSpeed |
| ✔ tmodulesocket | ✔ tmoduletimeout |
| ✔ Tmoduletcp | ✔ tmoduleinfo |
| ✔ Tmodulewriter | |
| ✔ Tmodulereader | |
| ✔ TmoduleRequest | |
| ✔ Tmoduleauth | |
| ✔ Tmoduletlsauth | |
| ✔ Tmoduleproxy | |
| ✔ tmodulesock5 |
| Модульный класс | Описание |
|---|---|
| Tmoduleredirect | Класс обеспечивает свойства для настройки вариантов перенаправления HTTP. |
| Tmodulehttp2 | Класс обеспечивает свойства для настройки параметров протокола HTTP/2. |
| Tmoduletimeout | Класс обеспечивает свойства для настройки опций протокола HTTP (S). |
| Модульный класс | Описание |
|---|---|
| Tmodulecookie | Класс предоставляет данные файлов cookie. |
uses
curl.http.session, curl.http.response;
var
Session : THTTP.TSession;
Response : THHTP.TResponse;
begin
Session.Url := ' https://github.com/isemenkov ' ;
Session.Redirect.FollowRedirect := True;
Response := Session.Get;
writeln( ' Url ' , Response.Request.Url);
writeln( ' Response code ' , Response.Header.ResponseCode);
writeln( ' Content-type ' , Response.Content.ContentType);
writeln( ' Content-size ' , Response.Content.ContentSize);
writeln( ' Content ' , Response.Content.ToString);
end ;