7
votes

In my application I am using IdHTTP.Get. A part of the code:

var
  IdHTTP: TIdHTTP;
begin
  IdHTTP := TIdHTTP.Create(nil);
  Output := IdHTTP.Get(url);
  ...
  IdHTTP.Free;

Using IdHTTP.Version gives me the version: 10.6.2.5263

I have downloaded the OpenSSL from here, both libeay32.dll and ssleay32.dll are in the same folder of my application.

This problem occured since I am using a new laptop with Windows 10. I hope someone can tell me how to solve this problem!

2
Use Indy's WhichFailedToLoad() function in the IdSSLOpenSSLHeaders unit to find out which DLL failed to load.whosrdaddy
Check the firewall settings for (application-specific) block of outgoing connectionsmjn
@whosrdaddy thanks, it appears that only libeay32.dll failed to loadTeun
@mjn I turned off the firewall and tried, but it didn't helpTeun
@Teun: what exactly is WhichFailedToLoad() returning?Remy Lebeau

2 Answers

2
votes

If you need to access an https url, you must add some code, to complete the creation of the TidHTTP component.

Try use something like this:

// create components
HTTPs := Tidhttp.Create(nil);
IdSSL := TIdSSLIOHandlerSocket.Create(nil);
// try..finally for free
try
  // ini
  HTTPs.ReadTimeout := 30000;
  HTTPs.IOHandler := IdSSL;
  IdSSL.SSLOptions.Method := sslvTLSv1;
  IdSSL.SSLOptions.Method := sslvTLSv1;
  IdSSL.SSLOptions.Mode := sslmUnassigned;
  ...

You need to add IdSSLOpenSSL to uses clause.

0
votes

Having 32 bit target platform for your application in a 64 bit system will also cause this problem. I don't know how to properly fix this but an easy way is to compile exe for same system your OS is.