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@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to