Ini adalah delphi dan objek binding pascal dan pembungkus di sekitar perpustakaan curl. Libcurl adalah perpustakaan yang digunakan untuk mentransfer data yang ditentukan dengan sintaks URL, mendukung HTTP, HTTPS, FTP, FTP, Gopher, TFTP, SCP, SFTP, SMB, Telnet, Dict, LDAP, LDAPS, File, IMAP, SMTP, POP3, RTSP.
Perpustakaan diuji
Dapatkan sumber dan tambahkan direktori sumber ke jalur pencarian proyek. Untuk FPC, tambahkan direktori sumber ke file fpc.cfg .
Kloning git clone https://github.com/isemenkov/libpascurl .
Tambahkan unit yang ingin Anda gunakan ke klausa uses .
File libpascurl.pas berisi header yang diterjemahkan CURL untuk menggunakan pustaka ini dalam program Pascal. Anda dapat menemukan dokumentasi C API di situs web 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 ; Perpustakaan berisi satu set kelas untuk membuat pembungkus tingkat tinggi di sekitar protokol yang didukung. source/curl/ folder berisi komponen dasar yang mengimplementasikan fungsionalitas spesifik.
| Kelas | Keterangan |
|---|---|
| Tcurleasy | Ini adalah kelas dasar yang menginisialisasi pustaka curl dan menyediakan fungsi penanganan kesalahan. |
| Tsession | Ini adalah kelas orang tua untuk sesi semua protokol yang didukung. Ini menyediakan TMemoryBuffer untuk tersimpan data pengunduhan/pengunggahan. |
| Kesepakatan | Ini adalah kelas induk untuk data respons server. |
| Tpropertymodule | Ini adalah kelas dasar untuk semua sesi dan respons modul fungsionalitas tambahan. |
| Kelas Modul | Keterangan |
|---|---|
| Tmoduledns | Kelas menyediakan properti untuk mengatur opsi DNS libcurl. |
| Tmodulerequest | Kelas menyediakan properti untuk mengatur properti permintaan dan panggilan balik. |
| TModuleHeader | Kelas menyediakan properti untuk mengatur header. Dapat digunakan hanya dengan protokol seperti HTTP - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| TModuleOptions | Kelas menyediakan properti untuk mengatur opsi internal libcurl yang berbeda. |
| Tmoduleprotocols | Kelas menyediakan properti untuk mengatur opsi protokol libcurl. |
| Tmodulesocket | Kelas menyediakan properti untuk pengaturan soket. |
| Tmoduletcp | Kelas menyediakan properti untuk mengatur opsi protokol TCP. |
| TModuleWriter | Kelas menyediakan properti untuk mengatur fungsi callback unduh. |
| Tmodulereader | Kelas menyediakan properti untuk mengatur fungsi callback unggah. |
| TmoduleAuth | Kelas menyediakan properti untuk mengatur opsi auth. |
| Tmoduletlsauth | Kelas menyediakan properti untuk mengatur opsi otentikasi TLS AUTH. |
| Tmoduleproxy | Kelas menyediakan properti untuk mengatur opsi proxy. |
| Tmodulesock5 | Kelas menyediakan properti untuk mengatur opsi proxy sock5. |
| Kelas Modul | Keterangan |
|---|---|
| TModulecontent | Kelas menyediakan properti untuk mendapatkan buffer data konten. |
| TModuleHeader | Kelas memberikan properti untuk header respons. Dapat digunakan hanya dengan protokol seperti HTTP - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP. |
| Tmoduleredirect | Kelas memberikan informasi tentang pengalihan permintaan. |
| Tmodulespeed | Kelas menyediakan informasi pengunduhan/unggah kecepatan. |
| Tmoduletimeout | Kelas memberikan informasi waktu tunggu. |
| TmoduleInfo | Kelas memberikan informasi sesi. |
Kelas THTTPSESSION dan THTTPRESPONSE mengimplementasikan pembungkus tentang protokol HTTP (S). Kelas -kelas ini memperluas fungsionalitas kelas dasar dan memberikan yang baru yang hanya spesifik untuk protokol ini.
Pembungkus ini digunakan atau memperluas modul utama berikutnya:
| Modul sesi | Modul respons |
|---|---|
| ✔️ Tmoduledns | ✔️ Tmodulecontent |
| ✔️ TmoduleHeader | ✔️ TmoduleHeader |
| ✔️ TmoduleOptions | ✔️ Tmoduleredirect |
| ✔️ Tmoduleprotocols | ✔️ Tmodulespeed |
| ✔️ Tmodulesocket | ✔️ Tmoduletimeout |
| ✔️ Tmoduletcp | ✔️ TmoduleInfo |
| ✔️ Tmodulewriter | |
| ✔️ Tmodulereader | |
| ✔️ TmoduleRequest | |
| ✔️ TmoduleAuth | |
| ✔️ TmoduletlsAuth | |
| ✔️ Tmoduleproxy | |
| ✔️ Tmodulesock5 |
| Kelas Modul | Keterangan |
|---|---|
| Tmoduleredirect | Kelas menyediakan properti untuk mengatur opsi pengalihan http (s). |
| Tmodulehttp2 | Kelas menyediakan properti untuk mengatur opsi protokol HTTP/2. |
| Tmoduletimeout | Kelas menyediakan properti untuk mengatur opsi batas waktu protokol http (s). |
| Kelas Modul | Keterangan |
|---|---|
| TmoduleCookie | Kelas menyediakan data 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 ;