Quantcast
Channel: Active questions tagged https - Stack Overflow
Viewing all articles
Browse latest Browse all 1529

How do I implement SSL in Delphi to connect to a REDCap API server?

$
0
0

I am trying to use XE7 to connect to an in-house REDCap server. REDCap has a detailed description of the API at https://education.arcus.chop.edu/redcap-api/ and a test server at https://bbmc.ouhsc.edu/redcap/api with a test token key. There is assistance at https://mran.microsoft.com/snapshot/2015-08-18/web/packages/REDCapR/vignettes/TroubleshootingApiCalls.html in R.

I can connect to the test site with Curl and PostMan. My problem is how to implement this in Delphi with SSL.

The Curl script from PostMan:

curl --location 'https://bbmc.ouhsc.edu/redcap/api/' \--data-urlencode 'token=9A81268476645C4E5F03428B8AC3AA7B' \--data-urlencode 'content=record' \--data-urlencode 'action=export' \--data-urlencode 'format=csv' \--data-urlencode 'rawOrLabel=label'

After much searching, this is my Delphi code. What have I missed? IdLogFile1 is a component on the form.

function TForm1.IdSSLIOHandlerSocketOpenSSL1VerifyPeer(Certificate: TIdX509; AOk: Boolean; ADepth, AError: Integer): Boolean;begin   showmessage('at  IOhandler');                           Result := true;                             // always returns trueend;procedure TForm1.idHTTP2BtnClick(Sender: TObject);var post      : string;    Params    : TStringList;    idHTTP    : TIdHTTP;    SSL1      : TIdSSLIOHandlerSocketOpenSSL;    status    : integer;    response : TstringStream;begin   params   := TStringList.Create;   idHTTP   := TIdHTTP.Create(nil);   SSL1     := TIdSSLIOHandlerSocketOpenSSL.Create(idHTTP);   response  := TstringStream.create;   SSL1.SSLOptions.Mode        := sslmClient ;   SSL1.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2 ];// [  sslvSSLv3,  sslvSSLv23,sslvSSLv2, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];   SSL1.SSLOptions.VerifyDepth := 0;   SSL1.OnVerifyPeer           := IdSSLIOHandlerSocketOpenSSL1VerifyPeer;   SSL1.SSLOptions.VerifyMode  := [ ];   idHTTP.IOHandler            := SSL1;   memo1.Lines.clear;   idHTTP.ReadTimeout                 := 3000;   idHTTP.ConnectTimeout              := 3000;   idHttp.Request.BasicAuthentication := false;   try     idHTTP.HandleRedirects := true;     idHTTP.Intercept       := IdLogFile1;     IdLogFile1.Active      := true;     IdHttp.Request.CustomHeaders.Clear;     IdHttp.Request.CustomHeaders.Values['token']          := '9A81268476645C4E5F03428B8AC3AA7B';     IdHttp.Request.CustomHeaders.Values['content']        := 'record';     IdHttp.Request.CustomHeaders.Values['action']         := 'export';     IdHttp.Request.CustomHeaders.Values['format']         := 'csv';     IdHttp.Request.CustomHeaders.Values['rawOrLabel']     := 'label';     IdHttp.Request.CustomHeaders.Values['verify_ssl']     := 'false';     IdHttp.Request.CustomHeaders.Values['ssl_verify']     := 'false'; //various verify options ?     IdHttp.Request.CustomHeaders.Values['ssl_verifypeer'] := 'false';     idHTTP.Request.ContentType := 'application/x-www-form-urlencoded';     IdHTTP.Request.Charset     := 'utf-8';     idHTTP.HTTPOptions         := [hoKeepOrigProtocol, hoForceEncodeParams];     idHTTP.Post('https://bbmc.ouhsc.edu/redcap/api/', params, response );   finally        memo1.Lines.add('');        memo1.lines.add(idHTTP.ResponseText);        memo1.Lines.add('');        status           := idHTTP.ResponseCode;        memo1.Lines.Add('code: '+ inttostr(status));        idhttp.Disconnect;   end;   Params.Free;   SSL1.Free;   idHTTP.Free;   response.Free;end;

Viewing all articles
Browse latest Browse all 1529

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>