[gelöst] Internetdaten in Lazarus

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 361
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Internetdaten in Lazarus

Beitrag von juelin »

Hallo,
danke für Eure Hilfe.
Ich habe Windows 11 64Bit und Lazarus 4.2 mit FPC 3.2.2
Leider muss ich Euch nochmal nerven. (Sorry).
Mir hat der Vorschlag von Theo gut gefallen (genau mein Stil)
und ich habe ihn umgesetzt.

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics,
  Dialogs, StdCtrls, Grids, ExtCtrls, Eingabe,
  mvMapViewer, shellapi, System.UITypes, LCLIntf,
  LCLType, MVTYPES, mvDrawingEngine, Math,
  opensslsockets, fphttpclient, fpjson, jsonparser;

type

  { TForm1 }

  TForm1 = class(TForm)
    Memo1: TMemo;

  private
    function GetCoordinates(const Address: string): string;
  public
  end;

var
  Form1: TForm1;
    ialpha: string;
    inummer: integer;
    temp: string;
    jData: TJSONData;
    jItem: TJSONData;
{
  {$IF DEFINED(WIN64)}
    SSL_DLL_Names:    array[1..4] of string = ('libssl-3-x64',    'libssl-1_1-x64',    'ssleay32', 'libssl32');
    Crypto_DLL_Names: array[1..4] of string = ('libcrypto-3-x64', 'libcrypto-1_1-x64', 'libeay32', 'libeay32');
  {$ELSEIF DEFINED(WINDOWS)}
    SSL_DLL_Names:    array[1..4] of string = ('libssl-3',    'libssl-1_1',    'ssleay32', 'libssl32');
    Crypto_DLL_Names: array[1..4] of string = ('libcrypto-3', 'libcrypto-1_1', 'libeay32', 'libeay32');
  {$ELSEIF DEFINED(OS2GCC)}
    SSL_DLL_Names:    array[1..2] of string = ('kssl10',   'kssl');
    Crypto_DLL_Names: array[1..2] of string = ('kcrypt10', 'kcrypto');
  {$ELSEIF DEFINED(OS2)}
    SSL_DLL_Names:    array[1..2] of string = ('emssl10',  'ssl');
    Crypto_DLL_Names: array[1..2] of string = ('emcrpt10', 'crypto');
  {$ELSE}
    BaseSSLName: string = 'libssl';
    BaseCryptoName: string = 'libcrypto';
  {$ENDIF}
}
implementation

{$R *.lfm}

// im Programm
                  Memo1.Lines.Clear;
                  temp:=GetCoordinates(ialpha);
// ialpha := 'Eilenburger Weg 30, 68309 Mannheim, Germany';
                  inummer:=1;
                  if Trim(temp) = EmptyStr then inummer:=0;
                  if inummer = 1 then
                  begin
                    jData := GetJSON(temp);
                    for inummer:=0 to jData.Count-1 do
                    begin
                      jItem := jData.Items[inummer];
                      Memo1.Lines.Add(jItem.FindPath('display_name').AsString);
                      Memo1.Lines.Add(jItem.FindPath('lat').AsString+' : '+jItem.FindPath('lon').AsString);
                      Memo1.Lines.Add(EmptyStr);
                    end;
                    jData.Free;
                    Memo1.Visible:=True;
                  end;

function TForm1.GetCoordinates(const Address: string): string;
var
  HttpClient: TFPHTTPClient;
  Response: string;
begin
  HttpClient:=TFPHTTPClient.Create(nil);
  try
    HttpClient.AddHeader('User-Agent', 'MeinAppName/1.0 (kontakt@beispiel.de)');
    HttpClient.AddHeader('From','meine@domain.tld');
    Response:=HttpClient.Get('https://nominatim.openstreetmap.org/search?q='+EncodeURLElement(Address)+'&format=json');
    Result:=Response;
   finally
    HttpClient.Free;
  end;
end;
Habe den Vorschlag von af0815 mit den SSL_DLL_Names ausprobiert.
Bringt aber nix.
Siehe im Code nach var Form1: TForm1;

Ich bekomme immer bei dem Befehl:

Code: Alles auswählen

Response:=HttpClient.Get('https://nominatim.openstreetmap.org/search?q='+EncodeURLElement(Address)+'&format=json');
die Fehlermeldung siehe Anhang.

Habe auch schon im Internet nach OpenSSL.dll gesucht.
Habe aber nix gefunden.
Habe dafür die Software OpenSSL-Win64 downgeloadet und installiert.
Da sind folgende dll's drin: libcrypto-3-x64.dll und libssl-3-x64.dll

Ich weiss leider nicht mehr weiter.
Kann da Jemand helfen?
Würde auch für Hilfe 50€ spenden. (brauche nur ein Bankkonto).

Danke und Gruß
Jürgen
Dateianhänge
bild2.jpg
bild2.jpg (33.35 KiB) 222 mal betrachtet

Benutzeravatar
theo
Beiträge: 11241
Registriert: Mo 11. Sep 2006, 19:01

Re: Internetdaten in Lazarus

Beitrag von theo »

Bei Indy gibt's auch was:
https://github.com/IndySockets/OpenSSL- ... penssl-3_x
Wie gesagt, ich bin nicht auf Windows.

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 361
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Internetdaten in Lazarus

Beitrag von juelin »

Nachtrag:
wenn ich in Firefox den Befehl:

Code: Alles auswählen

https://nominatim.openstreetmap.org/search?q=Eilenburger Weg 30, 68309 Mannheim, Germany&format=json
eingebe so kommen die Werte siehe Anhang.
Gruß
Jürgen
Dateianhänge
bild3.jpg
(153.63 KiB) Noch nie heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7238
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

juelin hat geschrieben: Mo 23. Mär 2026, 11:59 Habe den Vorschlag von af0815 mit den SSL_DLL_Names ausprobiert.
Bringt aber nix.
War auch nur gedacht, das man weis, wie die richtigen Libs heissen, nicht als Code im Programm.
juelin hat geschrieben: Mo 23. Mär 2026, 11:59 Habe auch schon im Internet nach OpenSSL.dll gesucht.
Habe aber nix gefunden.
Habe dafür die Software OpenSSL-Win64 downgeloadet und installiert.
Da sind folgende dll's drin: libcrypto-3-x64.dll und libssl-3-x64.dll
Lege die Dll's in das gleicher Verzeichnis, wo deine EXE drinnen ist (ev. auch die anderen DLL's die im OpenSSL Paket drinnen waren).

BTW: Ich hoffe deine App ist 64 Bit. (Kopier mal die Lazarus Version heraus und poste sie). Nicht das du auf 32 Bit kompilierst und 64 Bit Libs installiert hast. Du wärest nicht der Erste :-) - und sicher nicht der Letzte.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 361
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Internetdaten in Lazarus

Beitrag von juelin »

Also, habe die Files libcrypto-3-x64.dll und libssl-3-x64.dll im Verzeichnis
wo das Rufzeichen.exe ist drin.
Fehler (wie oben) kommt immer noch.
Habe auch die Zuweisung wieder rein genommen.

Code: Alles auswählen

  {$IF DEFINED(WIN64)}
    SSL_DLL_Names:    array[1..4] of string = ('libssl-3-x64',    'libssl-1_1-x64',    'ssleay32', 'libssl32');
    Crypto_DLL_Names: array[1..4] of string = ('libcrypto-3-x64', 'libcrypto-1_1-x64', 'libeay32', 'libeay32');
  {$ELSEIF DEFINED(WINDOWS)}
    SSL_DLL_Names:    array[1..4] of string = ('libssl-3',    'libssl-1_1',    'ssleay32', 'libssl32');
    Crypto_DLL_Names: array[1..4] of string = ('libcrypto-3', 'libcrypto-1_1', 'libeay32', 'libeay32');
  {$ELSEIF DEFINED(OS2GCC)}
    SSL_DLL_Names:    array[1..2] of string = ('kssl10',   'kssl');
    Crypto_DLL_Names: array[1..2] of string = ('kcrypt10', 'kcrypto');
  {$ELSEIF DEFINED(OS2)}
    SSL_DLL_Names:    array[1..2] of string = ('emssl10',  'ssl');
    Crypto_DLL_Names: array[1..2] of string = ('emcrpt10', 'crypto');
  {$ELSE}
    BaseSSLName: string = 'libssl';
    BaseCryptoName: string = 'libcrypto';
  {$ENDIF}
Die Zuweisungen stehen direkt hinter den Zuweisungen der globalen Variablen.
Ist das richtig?

Gruß
Jürgen

wp_xyz
Beiträge: 5405
Registriert: Fr 8. Apr 2011, 09:01

Re: Internetdaten in Lazarus

Beitrag von wp_xyz »

Ich habe unter Windows die DLL-Hell um OpenSSL satt und bin bei solchen einfachen Downloads dazu übergegangen, statt fphttpclient die Windows-internen Aufrufe zu verwenden:

Code: Alles auswählen

uses
  {$IFDEF MSWINDOWS}
   windows, wininet,
  {$ELSE}
   {$IF FPC_FullVersion >= 30200}opensslsockets,{$IFEND}
   fphttpclient,
  {$ENDIF}
  ....;

{$IFDEF MSWINDOWS}
// Adapted from
//   http://www.scalabium.com/faq/dct0080.htm
function Download(URL: String; AStream: TStream; out AErrMsg: String): Boolean;
const
  KB = 1024;
var
  netHandle: HInternet;
  urlHandle: HInternet;
  buffer: array[0..4*KB-1] of Byte;
  bytesRead: dWord = 0;
  errCode: Integer = 0;
begin
  Result := false;
  AErrMsg := '';
  NetHandle := InternetOpen('Mozilla/5.0(compatible; WinInet)', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

  // NetHandle valid?
  if netHandle = nil then
  begin
    errCode := GetLastError;
    AErrMsg := GetWinInetError(errCode);
    exit;
  end;

  try
    urlHandle := InternetOpenUrl(netHandle, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0);

    // UrlHandle valid?
    if urlHandle = nil then
    begin
      errCode := GetLastError;
      AErrMsg := GetWinInetError(errCode);
      exit;
    end;

    try
      repeat
        InternetReadFile(urlHandle, @buffer, SizeOf(buffer), bytesRead);
        if bytesRead > 0 then
          AStream.Write(buffer, bytesRead);
      until bytesRead = 0;
      AStream.Position := 0;
      Result := true;
    finally
      InternetCloseHandle(urlHandle);
    end
  finally
    InternetCloseHandle(netHandle);
  end;
end;
{$ELSE}
// Get file from the internet
function Download(URL: String; AStream: TStream; out AErrMsg: String): Boolean;
begin
  AErrMsg := '';
  with TFpHttpClient.Create(nil) do
    try
      try
        AllowRedirect := true;
        Get(URL, AStream);
        AStream.Position := 0;
        Result := true;
      except
        on E:EHTTPClient do begin
          AErrMsg := E.Message;
          Result := false;
        end;
      end;
    finally
      Free;
    end;
end;
{$ENDIF}

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7238
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

juelin hat geschrieben: Mo 23. Mär 2026, 13:49 Also, habe die Files libcrypto-3-x64.dll und libssl-3-x64.dll im Verzeichnis
wo das Rufzeichen.exe ist drin.
...
Die Zuweisungen stehen direkt hinter den Zuweisungen der globalen Variablen.
Ist das richtig?
Nein, die Codezeilen ware NUR DAZU GEDACHT, zu ZEIGEN wie die Dll NAMEN sind. NICHT zur VERWENDUNG !!!

Die Fragen was du nicht beantwortet hast
a ) Ist die Rufzeichen.exe eine 32Bit oder 64 Bit Anwendung
b ) Was ist deine FPC/Lazarus Version (siehe Menü Help -> About Lazarus),
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 361
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Internetdaten in Lazarus

Beitrag von juelin »

Hallo af0815,
ich habe Windows11 64Bit mit Lazarus 4.2 und FPC 3.2.2.
Gruß
Jürgen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7238
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

juelin hat geschrieben: Mo 23. Mär 2026, 17:10 ich habe Windows11 64Bit mit Lazarus 4.2 und FPC 3.2.2.
Windows 11 ist 64Bit, das ist klar. ABER Lazarus/FP gibt es 32Bit und 64Bit. Deine App kann auch 32Bit oder 64Bit sein, unabhängig von der Bitness von Lazarus.

Deswegen die Frage nach der Lazarusversion über das Menü Help-> About Lazarus.
Ausgabe dort bei mir, mit CopyToClipboard: "Lazarus 4.5 (rev lazarus_4_4-43-gb42c5e00a6) FPC 3.2.3 x86_64-linux-qt5" damit ist auch klar, das ich einen x86_64 FPC mit Lazarus habe. Der kompiliert auch default 64Bit, somit sind die Programme 64Bit, wenn ich nichts speziell umstelle. Bei Windows gibt es beide Varianten von Lazarus/FPC.

Aktuell ist das so, wenn ich dich nach dem Sprit für dein Auto frage, sagst du: "Es ist ein roter Ford"
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 361
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Internetdaten in Lazarus

Beitrag von juelin »

hallo af0815
anbei mein About Lazarus..
Gruß
Jürgen
Dateianhänge
bild4.jpg
bild4.jpg (47.56 KiB) 96 mal betrachtet

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 361
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Internetdaten in Lazarus

Beitrag von juelin »

Hallo wp_xyz,
würde gerne Deinen Vorschlag ausprobieren.
Aber wenn ich in uses windows rein mache
bekomme ich beim Compelieren bei dem Befehl:
BUser:=GetEnvironmentVariable('USERNAME');
die Fehlermeldung:
unit1.pas(1446,12) Error: Wrong number of parameters specified for call to "GetEnvironmentVariable"

Ohne windows läuft das Programm.

Gruß
Jürgen

kirchfritz
Beiträge: 260
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 4.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: Internetdaten in Lazarus

Beitrag von kirchfritz »

Probier doch mal meine Lösung. ZIP-Datei im Anhang
Dateianhänge
Screenshot 2026-03-23 201637.png
Screenshot 2026-03-23 201637.png (38.97 KiB) 85 mal betrachtet
GetGeoCoordinates.zip
(2.89 MiB) 8-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7238
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Internetdaten in Lazarus

Beitrag von af0815 »

kirchfritz hat geschrieben: Mo 23. Mär 2026, 20:18 Probier doch mal meine Lösung. ZIP-Datei im Anhang
Ich gehe davon aus, das deine Version gehen wird. die libcrypto-1_1.dll und libssl-1_1.dll dürften funktionieren. Ich vermute das bei der Version von Jürgen noch ein Runtimepaket vom MS gebraucht wird. Zumindest deuten die Bindungen in der DLL das an.

libssl-3-x64.dll, libcrypto-3-x64.dll
VCRUNTIME140.dll, api-ms-win-crt-environment-l1-1-0.dll,api-ms-win-crt-runtime-l1-1-0.dll,....
Sein Programm ist 64Bit, so wie auch Lazarus/FPC soviel weis ich auch. Also daher kommt nicht das Problem.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 361
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: [gelöst] Internetdaten in Lazarus

Beitrag von juelin »

Hallo an Alle die mitgeholfen haben,
herzlichen Dank an Alle.
Hatte die falschen DLL's drin.
Hat halt gedauert bis ich drauf gekommen bin.
Machmal ist man blind.
Letzt endlich hat af0815 mir ganz toll geholfen.
Durch Ihn bin ich erst auf meinen Fehler gekommen.
Na ja, spende jetzt 100€ ans Lazarus-Forum (hat af0815 vorgeschlagen).
Also nochmals Dank an Alle.
Gruß
Jürgen

Benutzeravatar
Roland Chastain
Beiträge: 189
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: [gelöst] Internetdaten in Lazarus

Beitrag von Roland Chastain »

Ich verstehe, dass die gestellte Frage darauf abzielt, die Koordinaten einer bestimmten Adresse zu erhalten.

Für den Fall, dass es jemanden interessiert, hier ist eine Lösung, um die Koordinaten einer Stadt zu erhalten.
Dateianhänge
citydemo.zip
(1.61 KiB) 6-mal heruntergeladen
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Antworten