[fpc-pascal] How To: Use lib curl example

Rainer Stratmann rainerstratmann at t-online.de
Sun Dec 5 21:08:31 CET 2021


Am Sonntag, 5. Dezember 2021, 20:38:30 CET schrieb Rainer Stratmann via fpc-
pascal:
> Does that mean curl is always waiting until the whole operation (download)
> is complete?
> 
> Is it possible to do it in a nonblocked way? For example with a continuous
> nonblocked loop call and a flag when the operation is finished?
> 

Found it already. It seems that a nonblocking operation mode is possible!

https://everything.curl.dev/libcurl/drive
https://everything.curl.dev/libcurl/drive/multi

> 
> Am Dienstag, 28. September 2021, 02:01:00 CET schrieb Anthony Walter via
> fpc-
> pascal:
> > I was having some problems using vanilla sockets and OpenSSL to read a few
> > specific web pages using HTTPS. Normally I don't have any problems
> > using HTTPS, but with a few sites my code was not working. I ending up
> > finding the RTL unit LibCurl in one of the FPC packages and got it working
> > without too much trouble. LibCurl is a library allowing programmers to get
> > the functionality of the curl program without launching an external
> > process.
> > 
> > If anyone is interested, here is a small bit of code to GET a page over
> > HTTP or HTTPS using LibCurl.
> > 
> > Interface:
> > 
> > function CurlGet(const Url: string; out Data: string; UserAgent: string =
> > ''): Boolean;
> > 
> > Implementation:
> > 
> > uses
> > 
> >   LibCurl;
> > 
> > function WriteData(Ptr: PChar; MemberSize, MemberCount: UIntPtr; var Data:
> > string): UIntPtr; cdecl;
> > var
> > 
> >   S: string;
> > 
> > begin
> > 
> >   SetString(S, Ptr, MemberSize * MemberCount);
> >   Data := Data + S;
> >   Result := MemberSize * MemberCount;
> > 
> > end;
> > 
> > function CurlGet(const Url: string; out Data: string; UserAgent: string =
> > ''): Boolean;
> > var
> > 
> >   Curl: PCURL;
> > 
> > begin
> > 
> >   Data := '';
> >   Result := False;
> >   if Url = '' then
> >   
> >     Exit;
> >   
> >   Curl := curl_easy_init();
> >   if Curl = nil then
> >   
> >     Exit;
> >   
> >   try
> >   
> >     curl_easy_setopt(curl, CURLOPT_URL, [PChar(Url)]);
> >     if UserAgent <> '' then
> >     
> >       curl_easy_setopt(curl, CURLOPT_USERAGENT, [PChar(UserAgent)]);
> >     
> >     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [@WriteData]);
> >     curl_easy_setopt(curl, CURLOPT_WRITEDATA, [@Data]);
> >     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, [0]);
> >     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, [0]);
> >     Result := curl_easy_perform(curl) = CURLE_OK;
> >   
> >   finally
> >   
> >     curl_easy_cleanup(Curl);
> >   
> >   end;
> > 
> > end;
> 
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal






More information about the fpc-pascal mailing list