มันคือ Delphi และ Object Pascal Bindings และ Wrapper รอบ ๆ Curl Library Libcurl เป็นไลบรารีที่ใช้สำหรับการถ่ายโอนข้อมูลที่ระบุด้วยไวยากรณ์ URL, รองรับ HTTP, HTTPS, FTP, FTPS, Gopher, TFTP, SCP, SFTP, SMB, Telnet, DICT, LDAP, LDAP, ไฟล์, IMAP, SMT
ห้องสมุดได้รับการทดสอบสำหรับ
รับแหล่งที่มาและเพิ่มไดเรกทอรี ต้นฉบับ ไปยังเส้นทางการค้นหาโครงการ สำหรับ FPC เพิ่มไดเรกทอรี ต้นฉบับ ลงในไฟล์ fpc.cfg
โคลนที่เก็บ git clone https://github.com/isemenkov/libpascurl
เพิ่มหน่วยที่คุณต้องการใช้ในประโยค uses
ไฟล์ libpascurl.pas มีส่วนหัวที่แปลด้วยขดเพื่อใช้ไลบรารีนี้ในโปรแกรม Pascal คุณสามารถค้นหาเอกสาร C 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 ; ห้องสมุดมีชุดคลาสสำหรับการสร้าง wrappers ระดับสูงรอบโปรโตคอลที่รองรับ source/curl/ โฟลเดอร์มีส่วนประกอบพื้นฐานที่ใช้ฟังก์ชั่นเฉพาะ
| ระดับ | คำอธิบาย |
|---|---|
| tcurleasy | เป็นคลาสพื้นฐานที่เริ่มต้นไลบรารี Curl และให้ฟังก์ชั่นการจัดการข้อผิดพลาด |
| ความสุข | มันเป็นคลาสหลักสำหรับเซสชันของโปรโตคอลที่รองรับทั้งหมด มันมี tmemorybuffer สำหรับการดาวน์โหลด/อัปโหลดข้อมูล |
| การบุกรุก | เป็นคลาสแม่สำหรับข้อมูลการตอบสนองเซิร์ฟเวอร์ |
| tpropertymodule | มันเป็นคลาสพื้นฐานสำหรับทุกเซสชันและตอบสนองโมดูลฟังก์ชั่นเพิ่มเติม |
| คลาสโมดูล | คำอธิบาย |
|---|---|
| tmoduledns | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือก Libcurl DNS |
| tmodulerequest | คลาสมีคุณสมบัติในการตั้งค่าคุณสมบัติการร้องขอและการโทรกลับ |
| tmoduleheader | ชั้นเรียนมีคุณสมบัติในการตั้งค่าส่วนหัว สามารถใช้ได้เฉพาะกับโปรโตคอลที่มีลักษณะคล้าย HTTP - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP |
| tmoduleoptions | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกภายใน Libcurl ที่แตกต่างกัน |
| tmoduleprotocols | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกโปรโตคอล Libcurl |
| tmodulesocket | ชั้นเรียนมีคุณสมบัติในการตั้งค่าซ็อกเก็ต |
| tmoduletcp | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกโปรโตคอล TCP |
| tmodulewriter | คลาสมีคุณสมบัติในการตั้งค่าฟังก์ชั่นการโทรกลับ |
| tmodulereader | คลาสมีคุณสมบัติในการตั้งค่าฟังก์ชั่นการอัพโหลดการโทรกลับ |
| tmoduleauth | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกการรับรองความถูกต้อง |
| tmoduletlsauth | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกการรับรองความถูกต้องของ TLS |
| tmoduleproxy | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกพร็อกซี |
| tmodulesock5 | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกพร็อกซี SOCK5 |
| คลาสโมดูล | คำอธิบาย |
|---|---|
| tmodulecontent | คลาสมีคุณสมบัติในการรับบัฟเฟอร์ข้อมูลเนื้อหา |
| tmoduleheader | ชั้นเรียนมีคุณสมบัติในการตอบสนองส่วนหัว สามารถใช้ได้เฉพาะกับโปรโตคอลที่มีลักษณะคล้าย HTTP - HTTP (S), FTP (S), POP3 (S), IMAP, SMTP |
| tmoduleredirect | ชั้นเรียนให้ข้อมูลเกี่ยวกับการเปลี่ยนเส้นทางคำขอ |
| tmodulespeed | คลาสให้ข้อมูลการดาวน์โหลด/อัปโหลดความเร็ว |
| tmoduleTimeout | ชั้นเรียนให้ข้อมูลการหมดเวลา |
| tmoduleinfo | ชั้นเรียนให้ข้อมูลเซสชัน |
THTTPSESSION และ THTTPRESPONSE คลาสใช้ wrapper เกี่ยวกับโปรโตคอล HTTP (S) คลาสนี้ขยายฟังก์ชันการทำงานของคลาสฐานและจัดเตรียมใหม่ที่เฉพาะเจาะจงเฉพาะกับโปรโตคอลนี้
เสื้อคลุมนี้ใช้หรือขยายโมดูลหลักถัดไป:
| โมดูลเซสชัน | โมดูลการตอบสนอง |
|---|---|
| ✔ tmoduledns | ✔ tmodulecontent |
| ✔ tmoduleheader | ✔ tmoduleheader |
| ✔ TModuleOptions | ✔ tmoduleredirect |
| ✔ tmoduleprotocols | ✔ tmodulespeed |
| ✔ tmodulesocket | ✔ tmoduleTimeout |
| ✔ tmoduletcp | ✔ tmoduleinfo |
| ✔ tmodulewriter | |
| ✔ tmodulereader | |
| ✔ tmodulerequest | |
| ✔ tmoduleauth | |
| ✔ tmoduletlsauth | |
| ✔ tmoduleproxy | |
| ✔ tmodulesock5 |
| คลาสโมดูล | คำอธิบาย |
|---|---|
| tmoduleredirect | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกการเปลี่ยนเส้นทาง HTTP (S) |
| tmodulehttp2 | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกโปรโตคอล HTTP/2 |
| tmoduleTimeout | คลาสมีคุณสมบัติในการตั้งค่าตัวเลือกการหมดเวลาโปรโตคอล HTTP (S) |
| คลาสโมดูล | คำอธิบาย |
|---|---|
| tmodulecookie | ชั้นเรียนให้ข้อมูลคุกกี้ |
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 ;