Entwickler-Ecke
Internet / Netzwerk - WebDav
bennixview - Mo 14.06.04 13:46
Titel: WebDav
Hi,
kennt sich jemand mit dem Thema WebDav aus?
Ich schreibe gerade ein kleines Programm welches WebDav ressourcen benutzen soll.
Eine Connection auf test.webdav.org habe ich bereits hinbekommen. Dazu nutze ich den Indy TCPClient. Wie gehts weiter? ich möchte z.B. den Inhalt der Ressource sehen oder etwas anlegen. Welche möglichst einfach gehaltenen statements benötige ich?
maxk - Mo 14.06.04 14:30
Handelt es sich bei WebDav um das neue Mailsystem, welches IMAP ablösen soll?
bennixview - Di 15.06.04 09:25
Hi,
danke erst mal :-)
Den Link mit der Hotmail Anleitung kenne ich bereits aber ich werd mal versuchen da noch mehr Informationen rauszufinden.
Ich wollte eigentlich ein allgemeines Beispiel für die Kommunikation mit dem Protokoll, denn da bin ich noch nicht wirklich durchgestiegen, aber vieleicht klappts ja wenn ich die Beispiele mal ganz durcharbeite.
THX All
espen - Fr 18.06.04 13:32
Hi,
hier mal ein kleines Beispiel, wie Du die komplette Verzeichnisstruktur einlesen kannst.
(Ist schnell hingetippt aber Ausbaufähig :wink: )
procedure WEBDAV_GetContent
const
REQUEST_TEXT = '<?xml version="1.0" encoding="utf-8"?><D:propfind xmlns:D="DAV:"><D:allprop/></D:propfind>';
var
aServerFile : String;
xmlHttp : TServerXMLHTTP40;
intHTTPStatus : Integer;
begin
// ****
// **** Verzeichnis einlesen
// ****
xmlHttp := TServerXMLHTTP40.Create(nil);
xmlHttp.open('PROPFIND', 'https://mediacenter.gmx.net', True, 'Username', 'Kennwort');
xmlHttp.setRequestHeader('Depth', 'infinity');
xmlHttp.setRequestHeader('Content-Length', IntToStr(Length(REQUEST_TEXT)));
xmlHttp.setRequestHeader('Content-type', 'text/xml');
xmlHttp.setRequestHeader('Cache-Control', 'no-cache, max-age=0, Expires=-1, Buffer=True');
xmlHttp.setRequestHeader('pragma', 'no-cache');
try
intHTTPStatus := 1;
xmlHttp.send(REQUEST_TEXT);
while intHTTPStatus <> 4 do
begin
intHTTPStatus := xmlHttp.readyState;
Application.ProcessMessages
end;
except
on E: Exception do
begin
showmessage(e.Message);
end;
end;
showmessage(xmlHttp.responseText);
xmlHttp.Disconnect();
end;
bennixview - Di 22.06.04 10:24
Hi,
und wenn ich ne Datei runterlade und diese dan speichern möchte ????
Ich könnte nen kleinen Denkanstoß gebrauchen. Habs schon mit dem Adodb.Stream versucht hat aber nicht geklappt.
FXMLHTTP.open('GET', 'http://test.webdav.org/dav/' + aRemoteSource, False, User, Password);
FXMLHTTP.setRequestHeader('GET', '/dav/' + aRemoteSource + ' HTTP/1.1');
FXMLHTTP.setRequestHeader('User-Agent', 'TArcWebDavMgr (compatible; MSIE 6.0; Mozilla 1.0)');
FXMLHTTP.setRequestHeader('Host', 'test.webdav.org');
FXMLHTTP.setRequestHeader('Depth', 'infinity');
FXMLHTTP.setRequestHeader('Content-Type', 'text/xml');
FXMLHTTP.send;
Und dann ???
espen - Di 22.06.04 12:10
Hi,
natürlich geht das auch mit dem ADODB-Stream. Um Resourcen zu sparen tut's aber auch ein Memory-Stream.
Wenn Du also wie oben beschrieben dein 'GET' abgesetzt hast, Steht in responseBody der Inhalt der Datei (Variant). Probiere mal folgendes (so ungefähr :wink: )
FXMLHTTP.open('GET', 'http://test.webdav.org/dav/' + aRemoteSource, False, User, Password);
FXMLHTTP.setRequestHeader('Content-Type', 'application/octet-stream');
FXMLHTTP.setRequestHeader('pragma', 'no-cache')
FXMLHTTP.send
...
memstream := TMemoryStream.Create;
try
VariantToStream(FXMLHTTP.responseBody, memstream);
memstream.SaveToFile('C:\blablabla.xyz');
Result := True;
finally
memstream.Free;
end;
...
// Diese Prozedur wandelt ein Variant in einen MemStream (ist von
http://www.swissdelphicenter.ch/de/
procedure VariantToStream (const variant : OleVariant; var memstream : TMemoryStream);
var
p : pointer;
begin
memstream.Position := 0;
memstream.Size := VarArrayHighBound (variant, 1) - VarArrayLowBound (variant, 1) + 1;
p := VarArrayLock (variant);
memstream.Write (p^, memstream.Size);
VarArrayUnlock (variant);
memstream.Position := 0;
end;
Gruss, Espen
bennixview - Mi 23.06.04 10:20
Hi,
Alles SUPER!!! ;-)
THX
maxk - Mi 23.06.04 23:27
Hey, wenn ihr das nächste mal Source postet, verwendet bitte die [Delphi ]-Tags, die machen es für Leute wie mich, die sich mit der Materie bissher kaum beschäftig haben, westentlich einfacher zu lesen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!