São as ligações Delphi e Object Pascal e Wrapper em torno da Biblioteca Curl. Libcurl é a biblioteca está usando para transferir dados especificados com sintaxe de URL, suportando HTTP, HTTPS, FTP, FTPS, Gopher, TFTP, SCP, SFTP, SMB, Telnet, Dict, LDAP, LDAPS, Arquivo, IMAP, SMTP, POP3, RTSP, RTS, RTP.
Biblioteca é testada para
Obtenha as fontes e adicione o diretório de origem ao caminho de pesquisa do projeto. Para FPC, adicione o diretório de origem ao arquivo fpc.cfg .
Clone the Repository git clone https://github.com/isemenkov/libpascurl .
Adicione a unidade que você deseja usar à cláusula uses .
O arquivo libpascurl.pas contém os cabeçalhos traduzidos para usar esta biblioteca em programas Pascal. Você pode encontrar a documentação da API C no site da 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 ; A biblioteca contém um conjunto de classes para criar embalagens de alto nível em torno dos protocolos suportados. A source/curl/ contém componentes básicos que implementa funcionalidade específica.
| Aula | Descrição |
|---|---|
| Tcurleasy | É a classe base que inicializa a biblioteca CURL e fornece funcionalidade de manuseio de erros. |
| TSession | É a classe pai para sessões de todos os protocolos suportados. Ele fornece um TMemoryBuffer para dados de download/upload armazenados. |
| TRESPONSÃO | É classe pai para dados de resposta ao servidor. |
| TPropertyModule | É classe base para todas as sessões e respostas módulos de funcionalidade adicionais. |
| Classe de módulo | Descrição |
|---|---|
| Tmoduledns | A classe fornece propriedades para configurar as opções LibCurl DNS. |
| Tmodulerequest | A classe fornece propriedades para configurar propriedades e retornos de chamada. |
| TmoduleHeader | A classe fornece propriedades para configurar cabeçalhos. Pode ser usado apenas com protocolos do tipo HTTP - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| TmoduleOptions | A classe fornece propriedades para configurar diferentes opções internas libcurl. |
| Tmoduleprotocols | A classe fornece propriedades para configurar opções de protocolo libcurl. |
| TmoduleSocket | Classe Forneça propriedades para configuração do soquete. |
| Tmoduletcp | A classe fornece propriedades para configurar opções de protocolo TCP. |
| Tmodulewriter | Classe Forneça propriedades para configurar o download da função de retorno de chamada. |
| Tmodulereader | Classe Forneça propriedades para configurar a função de retorno de chamada de upload. |
| Tmoduleauth | Classe Forneça propriedades para configurar opções de autenticação. |
| Tmoduletlsauth | A classe fornece propriedades para configurar as opções de autenticação de autenticação TLS. |
| TmoduleProxy | A classe fornece propriedades para configurar opções de proxy. |
| Tmodulesock5 | A classe fornece propriedades para configurar opções de proxy do SOCK5. |
| Classe de módulo | Descrição |
|---|---|
| TmoduleContent | A classe fornece propriedades para obter o buffer de dados de conteúdo. |
| TmoduleHeader | A classe fornece propriedades aos cabeçalhos de resposta. Pode ser usado apenas com protocolos do tipo HTTP - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| TmoduleredirEct | A classe fornece informações sobre os redirecionamentos de solicitação. |
| TmodulpeSpeed | Classe Forneça informações de download/upload de velocidade. |
| Tmoduletimeout | A classe fornece informações sobre limite. |
| TmoduleInfo | Classe Forneça informações de sessão. |
THTTPSESSÃO E THTTPRESPONSEMENTE IMPLEMEM O VABRA SOBRE O PROTOCOLO HTTP (S). Essas classes estendem a funcionalidade das classes base e fornecem novas que são específicas apenas para este protocolo.
Este invólucro usou ou estende os próximos módulos principais:
| Módulos de sessão | Módulos de resposta |
|---|---|
| ✔️ Tmoduledns | ✔️ TmoduleContent |
| ✔️ TmoduleHeader | ✔️ TmoduleHeader |
| ✔️ TmoduleOptions | ✔️ TmoduleredirEct |
| ✔️ TmoduleProtocols | ✔️ TmodulleSpeed |
| ✔️ TmoduleSocket | ✔️ Tmoduletimeout |
| ✔️ TmoduletCP | ✔️ TmoduleInfo |
| ✔️ Tmodulewriter | |
| ✔️ TmoduleReader | |
| ✔️ Tmodulerequest | |
| ✔️ Tmoduleauth | |
| ✔️ Tmoduletlsauth | |
| ✔️ TmoduleProxy | |
| ✔️ TModulesock5 |
| Classe de módulo | Descrição |
|---|---|
| TmoduleredirEct | A classe fornece propriedades para configurar opções de redirecionamento HTTP (s). |
| Tmodulehttp2 | A classe fornece propriedades para configurar opções de protocolo HTTP/2. |
| Tmoduletimeout | A classe fornece propriedades para configurar as opções de tempo limite do protocolo HTTP (s). |
| Classe de módulo | Descrição |
|---|---|
| Tmodulecookie | A classe fornece dados 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 ;