Es Delphi y Object Pascal Bindings and Wrapper alrededor de la biblioteca Curl. LibCurl es la biblioteca que está utilizando para transferir datos especificados con sintaxis de URL, admitir http, https, ftp, ftps, gopher, tftp, scp, sftp, smb, telnet, dict, ldap, ldaps, file, iMap, smtp, pop3, rtsp y rtmp.
La biblioteca se prueba para
Obtenga las fuentes y agregue el directorio de origen a la ruta de búsqueda del proyecto. Para FPC, agregue el directorio de origen al archivo fpc.cfg .
Clone El repositorio git clone https://github.com/isemenkov/libpascurl .
Agregue la unidad que desea usar a la cláusula uses .
El archivo libpascurl.pas contiene los encabezados traducidos de curl para usar esta biblioteca en programas Pascal. Puede encontrar la documentación de C API en el sitio web de 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 ; La biblioteca contiene un conjunto de clases para crear envoltorios de alto nivel alrededor de los protocolos compatibles. La carpeta source/curl/ contiene componentes base que implementan una funcionalidad específica.
| Clase | Descripción |
|---|---|
| Tcurleas | Es la clase base la que inicializa la biblioteca CURL y proporciona la funcionalidad de manejo de errores. |
| Tsession | Es la clase principal para sesiones de todos los protocolos compatibles. Proporciona un TMemoryBuffer para datos almacenados de descarga/carga. |
| Fusible | Es la clase principal para los datos de respuesta del servidor. |
| Tpropertymodule | Es la clase base para todas las sesiones y respuestas módulos de funcionalidad adicionales. |
| Clase de módulo | Descripción |
|---|---|
| Tmoduledns | La clase proporciona propiedades para configurar las opciones de DNS de LibCurl. |
| Tmodulerequest | La clase proporciona propiedades para configurar las propiedades de solicitud y las devoluciones de llamada. |
| Tmoduleheader | La clase proporciona propiedades para configurar los encabezados. Se puede usar solo con protocolos tipo HTTP: HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| Tmoduleoptions | La clase proporciona propiedades para configurar diferentes opciones internas de libcurl. |
| TmoduleProtocols | La clase proporciona propiedades para configurar las opciones de protocolo de libcurl. |
| Tmodulessock | La clase proporciona propiedades a la configuración del socket. |
| Tmoduletcp | La clase proporciona propiedades para configurar las opciones de protocolo TCP. |
| Tmodulewriter | La clase proporciona propiedades para configurar la función de descarga de devolución de llamada. |
| Tmodulerader | La clase proporciona propiedades para configurar la función de devolución de llamada de carga. |
| Tmoduleauth | La clase proporciona propiedades para configurar las opciones de autores. |
| Tmoduletlsauth | La clase proporciona propiedades para configurar las opciones de autenticación de autenticación TLS. |
| Tmoduleproxi | La clase proporciona propiedades para configurar opciones de proxy. |
| TMODULEOCH5 | La clase proporciona propiedades para configurar las opciones de proxy Sock5. |
| Clase de módulo | Descripción |
|---|---|
| Tmodulecontent | La clase proporciona propiedades para obtener el búfer de datos de contenido. |
| Tmoduleheader | La clase proporciona propiedades a los encabezados de respuesta. Se puede usar solo con protocolos tipo HTTP: HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| Tmoduleredirect | La clase proporciona información sobre redireccionamientos de solicitudes. |
| Tmodulespeed | La clase Proporcione información de descarga/carga de velocidad. |
| TMODULETIMEOUT | La clase proporciona tiempo de espera. |
| TmoduleInfo | Clase Proporcionar información de sesión. |
Las clases de thttpsession y thtttpponse implementan envolturas sobre el protocolo HTTP (s). Estas clases extienden la funcionalidad de las clases base y proporcionan una nueva que es específica solo para este protocolo.
Este envoltorio utiliza o extiende los siguientes módulos principales:
| Módulos de sesión | Módulos de respuesta |
|---|---|
| ✔️ tmoduledns | ✔️ tmoduleContent |
| ✔️ tmoduleheader | ✔️ tmoduleheader |
| ✔️ tmoduleOptions | ✔️ tmoduleredirect |
| ✔️ tmoduleProtocols | ✔️ tmodulespeed |
| ✔️ tmodulesocket | ✔️ tmoduletimeOut |
| ✔️ tmoduletcp | ✔️ tmoduleInfo |
| ✔️ tmodulewriter | |
| ✔️ tmoduleader | |
| ✔️ tmodulerequest | |
| ✔️ tmoduleauth | |
| ✔️ tmoduletlsauth | |
| ✔️ tmoduleproxy | |
| ✔️ tmodulesock5 |
| Clase de módulo | Descripción |
|---|---|
| Tmoduleredirect | La clase proporciona propiedades para configurar las opciones de redirección HTTP (S). |
| Tmodulehttp2 | La clase proporciona propiedades para configurar opciones de protocolo HTTP/2. |
| TMODULETIMEOUT | La clase proporciona propiedades para configurar las opciones de tiempos de espera del protocolo HTTP (S). |
| Clase de módulo | Descripción |
|---|---|
| Tmodulecookie | La clase proporciona datos de cookies. |
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 ;