Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Armageddon
Beiträge: 5
Registriert: Mi 16. Feb 2022, 18:37
OS, Lazarus, FPC: WIn10 (FPC 2.0.12 & FPC 2.2.z)
CPU-Target: 64Bit

Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von Armageddon »

ALs langjähriger nur Leser habe ich mich nun auch angemeldet, da ich beim Testen der Lazarus Version 2.2.0 über ein Problem gefallen bin, wo ich keine Lösung finde. (vllt ist auch nur eine Kleinigkeit, aber ich überseh diese konsequent irgendwie)

Istzustand
Laptop 1, win10/64, Lararus 2.0.12
Programm mit dem Issue kompiliert einwandfrei und läuft

Laptop 2, win10/64 Lazarus 2.2.0
Programm mit dem Issue kompliert einwandfrei, läuft aber nicht.

Es geht um eine Stelle, wo über den TFPHTTPClient via Post über https daten übertragen werden sollen.

Aufbau ist folgendermassen:

Code: Alles auswählen

     tGenericPost= class (tObject)
      Host      : rIPConnect;
      eInterface: tXmlrpcInterface;
      Client    : TFPHTTPClient;
      PostBegin : string;

      public
      constructor Create (IPConnect: rIPConnect);
      destructor Destroy; override;
      procedure  DefinateHeader; virtual;
      function   Post (Const PostText: string; var Response: String; TimeOut: integer): boolean;
      property   HostAdress: string read Host.IP;
  end; 


der constructor sieht so aus: Client wird hier angelegt

Code: Alles auswählen

constructor tGenericPost.Create  (IPConnect: rIPConnect);
begin
  inherited Create;
  Host:= IPConnect;
  if IPConnect.Password<>'' then Host.IP:= 'https://'+IPConnect.IP
  else Host.IP:= 'http://'+IPConnect.IP;
  Client:= TFPHTTPClient.Create(nil);
  DefinateHeader;
end; 
diese Routine wickelt dann die Kommunikation ab:

Code: Alles auswählen

function tGenericPost.Post (Const PostText: string; Var response: String; TimeOut: integer): boolean;
begin
  client.RequestBody := TStringStream.Create(UTF8ToWinCP (PostBegin+PostText));
  result:= true;
  try
    try
      Client.IOTimeout:= TimeOut;
      Response:= Client.Post(Host.IP); //(Client.Post(Host.CCUHostString));
    except
      on E:Exception do
        begin
           result:= false;
        end;
      end;
  finally
     Client.RequestBody.free;
  end;
end;    
Im nicht funktinierenden Part läuft Response:= Client.Post(Host.IP); in eine Exception, die hier mit result=false gefangen wird.

Es ergaben sich folgende Test und Ergebnisreihen:
Gleiches Programm (Sources von Laptop1 (2.0.12) auf Laptop 2 (2.2.0) portiert.


1.
compiliert auf Laptop 1 unter 2.0.12: exe läuft auf beiden Laptops

2.
compiliert auf Laptop2 unter 2.2.0: läuft nicht in der Entwicklungsumgebung (s.o. Exception), auch nicht nur als exe aufruf. Das compilierte exe 2.2.0 läuft auf Laptop 1 auch nicht.
Hierbei hatte ich auch noch diverse Versionen der beiden dlls probiert, immer das gleiche negative Ergebnis.

3.
Source auf Laptop2 unter 2.2.0 geändert, das dies nun kein https sondern http Post wird. Läuft sauber unter 2.2.0 , exe läuft auch Stand alone.

Frage ist nun, was, warum ist anders, dass der gleiche Source, der seit 1.8.x läuft, unter 2.2.0 bei einem https post nun ins Nirvana rennt. ?

(die passenden DDLs für den OPenSSL waren jeweils in dem Directory, in dem sich auch die EXE befindet)


Thnx, A.

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von sstvmaster »

Hallo Armageddon,

herzlich Willkommen. Was hast du in den uses stehen? Das sollte minimal drin stehen:

Code: Alles auswählen

uses
  ... 
  fphttpclient,
  openssl, { This implements the procedure InitSSLInterface }
  opensslsockets
  ...
Hast du mal InitSSLInterface probiert?

Code: Alles auswählen

InitSSLInterface;
Wie hier beschrieben: https://wiki.lazarus.freepascal.org/fphttpclient

Code: Alles auswählen

program dl_fphttp_c;

{$mode delphi}{$ifdef windows}{$apptype console}{$endif}

uses
  classes, 
  fphttpclient,
  openssl, { This implements the procedure InitSSLInterface }
  opensslsockets;

var
  Client: TFPHttpClient;

begin

  { SSL initialization has to be done by hand here }
  InitSSLInterface;

  Client := TFPHttpClient.Create(nil);
  try
    { Allow redirections }
    Client.AllowRedirect := true;
    writeln(Client.Get('https://google.com/')); 
  finally
    Client.Free;
  end;
end.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von sstvmaster »

Oder mach mal ein minimal Beispiel und lade das hier hoch.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Armageddon
Beiträge: 5
Registriert: Mi 16. Feb 2022, 18:37
OS, Lazarus, FPC: WIn10 (FPC 2.0.12 & FPC 2.2.z)
CPU-Target: 64Bit

Re: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von Armageddon »

meins sieht so aus:

Code: Alles auswählen

unit HTTP;

{$mode objfpc}{$H+}
{$codepage utf8}

interface

uses
  Forms, ComCtrls, Controls, ExtCtrls,Classes, SysUtils, fphttpclient, Dialogs,  StrTools, Process, SCD, StrUtils, LCLType, Windows, Clipbrd, INIFiles, fpjson, jsonparser,
  ComboEx,Graphics, LazUTF8, RegExpr,md5,FileUtil,LazFileUtils, jwatlhelp32,Laz2_DOM,
  synacode,base64;         
Deinen Ansatz teste ich natürlich gerne aus, nur bisher, (also bis einschliesslich 2.0.12) funktioniert das auch mit https mit dem hier gezeigten Aufbau ohne Komplikationen. Deshalb war ich ja irritiert

(Komplettes programm hier hochladen ist schwierig, das wird eine fast 6 stellige Anzahl an Zeilen).

Danke, A.

Armageddon
Beiträge: 5
Registriert: Mi 16. Feb 2022, 18:37
OS, Lazarus, FPC: WIn10 (FPC 2.0.12 & FPC 2.2.z)
CPU-Target: 64Bit

Re: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von Armageddon »

Da ich Hinweise auch gerne schnell ausprobiere, vor allem da es ja recht einfach wäre, schnell LAptop 2 gebootet und die beiden Units hinzugefügt.

Rebuild, etwas warten, starten... Es tuts..

Ist irgendwo beschrieben, dass ab Version 2.2.x für https diese Units mit angezogen werden müssen ? wenn ja hätte ichs überlesen gehabt. Und wenn ja, braucht es immer noch die beiden DLLs?

Thnx, A.

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von sstvmaster »

Es könnte auch an deinen SSL DLL's liegen, da gab es glaube ich mal was. Weiß aber nicht mehr.
Die letzten 1.0.x DLL's gibt es hier: https://indy.fulgan.com/SSL/

OpenSSL 1.1.x soll wohl ab fpc 3.3.1 funktionieren.
Ist irgendwo beschrieben, dass ab Version 2.2.x für https diese Units mit angezogen werden müssen ?
Das hat nix mit Lazarus zu tun eher mit FPC.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
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: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von af0815 »

Zur Info, Lazarus hat aus guten Grunde die Möglichkeit, seine Version und die Version von FPC anzuzeigen und auch ins Clipboard zu kopieren.

Als Faustregel, was sichtbar ist findet man bei Lazarus, die unsichtbaren Sachen kommen aus dem FPC. Weil die Version von Lazarus nicht fix an eine Version vom FPC gekoppelt ist, ist es immer sinnvoll die Kombination anzugeben. Gerade im Bereich von https hat sich einiges aufgrund Sicherheitsproblematiken geändert. Auch ganze Protokolle die akzeptiert werden haben sich geändert. Das ist nicht spezifisch für Lazarus/fpc, das habe ich in den letzten Monaten auch unter Python erlebt. Ein update der Distribution und Programme konnten keine Verbindung aufbauen ohne viel Fehlermeldung. Hat mich Stunden gekostet.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von PascalDragon »

Armageddon hat geschrieben:
Mi 16. Feb 2022, 19:00
Istzustand
Laptop 1, win10/64, Lararus 2.0.12
Programm mit dem Issue kompiliert einwandfrei und läuft

Laptop 2, win10/64 Lazarus 2.2.0
Programm mit dem Issue kompliert einwandfrei, läuft aber nicht.
Du schreibst zwar, dass dein Betriebssystem 64-bit ist, aber ist auch die Anwendung in beiden Fällen als 64-bit kompiliert?
FPC Compiler Entwickler

Armageddon
Beiträge: 5
Registriert: Mi 16. Feb 2022, 18:37
OS, Lazarus, FPC: WIn10 (FPC 2.0.12 & FPC 2.2.z)
CPU-Target: 64Bit

Re: Lazarus 2.2.0 Https Post geht nicht mehr (Win10 64bit) ?

Beitrag von Armageddon »

FPC Version auf Laptop 2 ist 3.2.2, die Projekteinstellungen waren in beiden Fällen identisch, da das komplette Projektverzeichnis von (1) nach (2) kopiert wurde,
Ziel Betriebssystem Win64
Ziel CPU Famile X86_64

Die Hinweise haben mir jedenfalls geholfen, das Einbinden der beiden genannten Units habe ich nun über eine Directive in Abhängigkeit der FPC Version realisiert. Funktioniert nun.

Danke an alle Beteiligten

A.

Antworten