Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi WebDAV Login Beispiel (https://www.delphipraxis.net/182691-webdav-login-beispiel.html)

hoika 16. Aug 2020 05:36

AW: WebDAV Login Beispiel
 
Hallo,
welche TLS-Version will der Server denn?

WiPhi 16. Aug 2020 16:24

AW: WebDAV Login Beispiel
 
Zitat:

Zitat von wschrabi (Beitrag 1471884)
Danke, doch wie ist das mit USERNAME und PAssword. Muss diese auch in die request eingebaut werden? wie?
Ich hab das so gemacht wie oben erwähnt, doch bekomme ich bei dem POST: 501 Not implemented yet.
Liegt das am SERVER?
Danke.

Versuchst du dir URI "login"

Delphi-Quellcode:
webdav.post('https://www.meinzielserver.de/login', Request, Response);
s := webdav.Get('https://www.meinzielserver.de/katzen/katzen.xml');
aufzurufen?

Das wäre falsch.

Ich mach nochmal ein komplettes Codebeispiel:
Delphi-Quellcode:
  // WebDAV Komponente erzeugen
  WebDAVClient := TIdWebDAV.Create;
  WebDAVClient.Intercept := LogEvent;
  // SSL handler zuweisen
  WebDAVClient.IOHandler := OpenSSL;
  WebDAVClient.Request.BasicAuthentication := True;
  WebDAVClient.AllowCookies := True;
  WebDAVClient.HandleRedirects := True;
  // Request konfigurieren
  WebDAVClient.Request.AcceptCharSet := 'utf-8';
  WebDAVClient.Request.CacheControl := 'no-cache';
  WebDAVClient.Request.Connection := 'Keep-Alive';
  WebDAVClient.Request.ContentEncoding := 'utf-8';
  // Login-Daten bei jedem Request mitgeben
  WebDAVClient.Request.Username := 'user';
  WebDAVClient.Request.Password := 'SUPERGEHEIM';

  // Nun mit dem Server kommunizieren, dabei die WebDAV-URI setzen
  // Diese muss immer aktuell zusammengesetzt werden, ich habe dafür ein Unterroutine, welche das in Abhängigkeit des aktuellen Verzeichnisses macht (BuildURI) - darin steckt Protokoll + Server + Resource
  // Download
  WebDAVClient.Get(BuildURL('katzen/katzen.xml'), Dest); // Protokoll + Server + Verzeichnis + Quelldatei, Dest ist ein Stream
  // Upload
  WebDAVClient.Put(BuildURL('katzen/katzen.xml'), Source); // Protokoll + Server + Verzeichnis + Zieldatei, Source ist ein Stream
  // Verzeichnis erstellen
  WebDAVClient.DAVMakeCollection(BuildURL('ein Verzeichnis'));
Also du musst dich nicht explizit an einer Login-Adresse autehtifzieren, sondern jedes mal im Request deine Login-Daten mitgeben. Deswegen ist es bei WebDAV unbedingt zu empfehlen die Daten über eine TLS/SSL Verschlüsselung zu transportieren, sonst hast du em Ende ein FTP, wobei die Daten im Klartext übers Web geschoben werden :).
Hoffe das hilft dir weiter :)

wschrabi 16. Aug 2020 17:23

AW: WebDAV Login Beispiel
 
Danke herzlichst für den Code. Habe es jetzt hinbekommen. Doch das Dir-Listing(aus dem Code oben) ist ein XML File, wie kann man das am Besten in eine ListView mit den Files in dem Dir anzeigen? Gibt`s da eine Parsing routine?
DANKE

mmw 16. Aug 2020 18:45

AW: WebDAV Login Beispiel
 
hallo,

eventuell hilft das

http://www.destructor.de/xmlparser/index.htm

Gruß

WiPhi 16. Aug 2020 19:12

AW: WebDAV Login Beispiel
 
Das parsen musst du von Hand übernehmen, kannst dir aber den Xml Databinding-Assi zu Hilfe nehmen:

Du kannst das XML Schema von https://github.com/lookfirst/sardine...ter/webdav.xsd über den Databinding Assistenten von Delphi einbinden.

Du liest die Response einfach ein und gehst die einzelnen Elemente durch.

Grober Ablauf:
Delphi-Quellcode:
var
  Status: IXMLMultistatus; // generiert durch den Xml Databinding Assi in Delphi
  WebDAVXml: TXmlDocument; // Das Xml enthält die Serverantwort mit dem Listing im Rohformat
  Response: TMemoryStream; // Alles im Arbeitsspeicher abarbeiten
begin
// Per PropFind das aktuelle Listing abrufen und in einen Stream (hier Response) laden
WebDAVClient.DAVPropFind(URL, nil, Response, '1', 1, 1); // Die '1' lädt das aktuelle Verzeichnis, die Tiefe kann hier bestimmt werden
// Den Stream in ein TXmlDocument (hier WebDAVXml) laden
WebDAVXml.LoadFromStream(Response);

// Wenn du das Databinding nutzt kannst du dich mit Getmultistatus(...) durch die Liste arbeiten
// .. anonsten jeden Tag per Hand auswerten...
Status := Getmultistatus(WebDAVXml)
// anschließend durch die Responses iterieren...
for iResp := 0 to Status.Response.Count - 1 do
begin
  ResponseItem := Status.Response[iResp];
  // Listing aufbauen und weiterverarbeiten (z.B. eine StringList oder besser eine TList<> mit eigenem Typ mit mehreren Informationen (Dateigröße, Datum, usw.)) ...
end;
Hoffe das hilft dir weiter :)

wschrabi 17. Aug 2020 06:21

AW: WebDAV Login Beispiel
 
Zitat:

Zitat von mmw (Beitrag 1471912)
hallo,

eventuell hilft das

http://www.destructor.de/xmlparser/index.htm

Gruß

Danke SUPER!

wschrabi 17. Aug 2020 06:22

AW: WebDAV Login Beispiel
 
Zitat:

Zitat von WiPhi (Beitrag 1471913)
Das parsen musst du von Hand übernehmen, kannst dir aber den Xml Databinding-Assi zu Hilfe nehmen:

Hoffe das hilft dir weiter :)

Super, besten Dank, wieder viel gelernt.

wschrabi 17. Aug 2020 14:02

AW: WebDAV Login Beispiel
 
Noch eine Frage: Also ich kann mit dem Indy WebDav auch das XML Repsone bekommen wenn ich ein DirListing abrufe.
Doch ich habe es auch mit IPWorks WebDAV componente von /nsoftware probiert, doch bekomme ich da immer ein 403 ERROR wenn ich das Listing abrufen will.
Upload und Download funktioniert mit beiden.

Nach dem ich auch die Optionen in Apache2 unter Ubuntu 18.4 gesetzt habe, damit er Listings im Browser anzeigt, siehe https://stackoverflow.com/questions/...che-web-server bekomme ich aber weiterhin bei meinem IPW WebDAV Prg den Error 403 Forbidden bei meinem Ubunutu 18.4 WebDav Server (Port 4433 und gültiges Certificate)

Wieso? Wer weiss Rat?
DANKE

wschrabi 18. Aug 2020 14:27

AW: WebDAV Login Beispiel
 
Liebe Leute,
besten DANK für Eure Tips, konnt so mit Indy ein WEBDAV Client realisieren.
Doch eine Frage. Beim Anlegen eines Verzeichnisses, das BLANK im Namen hat, wie geht man da vor. Er bekommt da einen Error.
Soll man den Namen ummer Utf8encode-n?
oder alle Blanks dir %20 ersezten?
DANKE für Euren Rat.
mfg
ws

WiPhi 18. Aug 2020 17:33

AW: WebDAV Login Beispiel
 
Delphi-Quellcode:
TURLEncoding.URLDecode(...)
bzw.

Delphi-Quellcode:
TURLEncoding.EncodePath(...)
aus

Delphi-Quellcode:
uses
  System.NetEncoding
ist dein Helfer ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz