lNet HTTPS demo geht / eigene klasse nicht

Alle Fragen zur Netzwerkkommunikation
Antworten
EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

lNet HTTPS demo geht / eigene klasse nicht

Beitrag von EugenE »

Hi!,

die console demo "/examples/console/lhttp" funktioniert mit https, es bekommt die Daten vollständig.

Aus dem Demo Code habe ich mir eine einfache Klasse geschrieben, jedoch mit dieser bekomme ich garkeinen Text von einer "https://..." Seite.

Ich rufe es so auf:

Code: Alles auswählen

var
https: THTTPSHandler;
Response : TStringStream;
 
Response := TStringStream.Create('');
 
https := THTTPSHandler.Create;
https.Request(url, data, Response);

Code: Alles auswählen

unit httpsclient;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  classes, sysutils, strutils, lnet, lhttp, lHTTPUtil, lnetSSL, URIParser, LCLProc;
 
 
type
 
  { THTTPSHandler }
 
  THTTPSHandler = class
  private
    HttpClient: TLHTTPClient;
    Done: boolean;
    TargetStream: TStream;
  public
    procedure Request(Const URL, DATA : String; Dest : TStream);
 
    procedure ClientDisconnect(ASocket: TLSocket);
    procedure ClientDoneInput(ASocket: TLHTTPClientSocket);
    procedure ClientError(const Msg: string; aSocket: TLSocket);
    function ClientInput(ASocket: TLHTTPClientSocket; ABuffer: pchar;
      ASize: Integer): Integer;
    procedure ClientProcessHeaders(ASocket: TLHTTPClientSocket);
  end;
 
implementation
 
{ THTTPSHandler }
 
procedure THTTPSHandler.Request(const URL, DATA: String; Dest: TStream);
var
  Host, URI, FileName, AltFileName: string;
  Port: Word;
  index: Integer;
  UseSSL: Boolean;
  SSLSession: TLSSLSession;
begin
  UseSSL := DecomposeURL(URL, Host, URI, Port);
  DebugLn('Host: ', Host, ' URI: ', URI, ' Port: ', IntToStr(Port));
 
  TargetStream := Dest;
 
  HttpClient := TLHTTPClient.Create(nil);
 
  SSLSession := TLSSLSession.Create(HttpClient);
  SSLSession.SSLActive := UseSSL;
 
  HttpClient.Session := SSLSession;
  HttpClient.Host := Host;
  HttpClient.Method := hmGet;
  HttpClient.Port := Port;
  HttpClient.URI := URI;
  HttpClient.Timeout := -1;
  HttpClient.OnDisconnect := @ClientDisconnect;
  HttpClient.OnDoneInput := @ClientDoneInput;
  HttpClient.OnError := @ClientError;
  HttpClient.OnInput := @ClientInput;
  HttpClient.OnProcessHeaders := @ClientProcessHeaders;
  HttpClient.SendRequest;
  Done := false;
 
  while not Done do
    HttpClient.CallAction;
  HttpClient.Free;
end;
 
procedure THTTPSHandler.ClientError(const Msg: string; aSocket: TLSocket);
begin
   raise Exception.Create('Error: '+ Msg);
end;
 
procedure THTTPSHandler.ClientDisconnect(ASocket: TLSocket);
begin
  DebugLn('Disconnected.');
  done := true;
end;
 
procedure THTTPSHandler.ClientDoneInput(ASocket: TLHTTPClientSocket);
begin
  DebugLn('done.');
  ASocket.Disconnect;
end;
 
function THTTPSHandler.ClientInput(ASocket: TLHTTPClientSocket;
  ABuffer: pchar; ASize: Integer): Integer;
begin
  Result:=TargetStream.Write(aBuffer[0], aSize);
end;
 
procedure THTTPSHandler.ClientProcessHeaders(ASocket: TLHTTPClientSocket);
begin
  DebugLn('Response: ', INtToStr( HTTPStatusCodes[ASocket.ResponseStatus]), ' ',
    ASocket.ResponseReason, ', data...');
end;
 
 
end.
Hat jemand ein funktionierendes Beispiel für HTTPS mit lNet oder Synapse oder was es sonst noch für Netzwerk Libraries für FPC/MAC gibt...

Gute Nacht,
Eugen

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Re: lNet HTTPS demo geht / eigene klasse nicht

Beitrag von EugenE »

Nun hab ich es mit Synapse geschafft.

Es bekommt "manchmal" eine Antwort und "oft" nichts.

Ich weiß nurnicht ob es an meiner Domain liegt oder an was anderem.... :(

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: lNet HTTPS demo geht / eigene klasse nicht

Beitrag von MAC »

probiert google oder so aus...
Wenn google nicht klappt , ist das ganze internet kaput ^^

Code: Alles auswählen

Signatur := nil;

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Re: lNet HTTPS demo geht / eigene klasse nicht

Beitrag von EugenE »

Google funktioniert anscheinend jedes mal....

Kann es daran liegen das meine Subdomain/domain kein richtiges Zertifikat hat?, also keins welches bei irgendeiner Trust-Firma akzeptiert wurde?

Antworten