Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Auf öffentlichen Ordner in ExchangeServer ohne Outlook zugreifen (https://www.delphipraxis.net/167450-auf-oeffentlichen-ordner-exchangeserver-ohne-outlook-zugreifen.html)

Jumpy 10. Apr 2012 09:34

AW: Auf öffentlichen Ordner in ExchangeServer ohne Outlook zugreifen
 
Hallo,

nach einem kurzen Osterurlaub, versuch ich mich weiter daran, den Code aus dem vorherigen Post in Delphi umzusetzen. Erstmal versuch ich nur, die Verbindung herzustellen und ein Suchkommando zu schicken, die Antwort soll dann einfach in ein Memo geschrieben werden.

Aber ich bekomme einen Error: HTTP/1.1 400 Bad Request

Scheinbar bau ich den Request falsch zusammen?

Vielleicht ist auch die ganze Vorgehensweise falsch, da ich nicht wirklich weiß, was ich da mache.

Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var w:TIdWebDAV;
  content:string;
  s:string;
  c:String;
  AskStream:TMemoryStream;
  ResponseStream:TStringStream;
begin
  content:='<?xml version=""1.0""?>'+
           '<g:searchrequest xmlns:g=""DAV:"">'+
           '<g:sql>'+
           'SELECT '+
           '""urn:schemas:contacts:sn"", ""urn:schemas:contacts:givenName"",'+
           '""urn:schemas:contacts:email1"", ""urn:schemas:contacts:telephoneNumber""'+
           ' FROM '+
           'Scope(''SHALLOW TRAVERSAL OF ""http://192.168.111.157/public/Kontakte""'')'+
           '</g:sql>'+
           '</g:searchrequest>"';

  ResponseStream:=TStringStream.Create(s);
  AskStream:=TMemoryStream.Create;
  w:=TIdWebDAV.Create();
  w.Request.Method:='SEARCH';
  w.Request.Username:=Username;
  w.Request.Password:=Password;
  w.Request.BasicAuthentication:=true;
  w.Request.URL:='http://192.168.111.157/public/Kontakte';
  w.Request.ContentType:='text/xml';
  AskStream.Write(content,Length(content));
  w.DAVSearch('http://192.168.111.157/public/Kontakte',-1,-1,AskStream,ResponseStream);
  Memo1.Lines.Add(ResponseStream.DataString);
  AskStream.Free;
  ResponseStream.Free;
end;

himitsu 10. Apr 2012 09:49

AW: Auf öffentlichen Ordner in ExchangeServer ohne Outlook zugreifen
 
Die XML-Datei sieht komisch aus, vorallem die doppelten "".

Außerdem ist dieses als String deklariert, was spätestens ab Delphi 2009 probleme bereitet, abgesehn davon, daß diese bei dir als ANSI vorliegt, aber da in der XML keine Codierung angegeben ist, sollte sie UTF-8 sein.

Warum wird die XML per Format und nicht über eine XML-Lib erstellt.

Dazu sieht das Ganze sehr nach SOAP oder Ähnlichem aus ... wieso dann nicht gleich das richtige Protokoll und eine passende Komponente verwenden? [edit] Ach du Sch***, wer hat diese Komponente verbrochen?

Jumpy 10. Apr 2012 11:04

AW: Auf öffentlichen Ordner in ExchangeServer ohne Outlook zugreifen
 
Die doppelten "" sind ein Fehler. Hab diesen Block aus der C#-Vorlage (siehe Post 10) entnommen. Da braucht man zwei "" um das erste zu maskieren.

Was die deklararion als String angeht, liegt das daran, dass ich von Streams usw. keine Ahnung habe. In der C#-Version wird es ja auch so gemacht, wie du sagst, mit nem Byte-Array, das aus einem UTF-8 codierten String erstellt wird. Ich weiß halt nur nicht, wie ich das in Delphi machen sollte.

Vielleicht kann mir generell mal wer sagen, wie man einen Stream den man senden will (das ganze wird ja in der Komponente per HTTP verssandt) erstellt/aufbaut (unabh. vom konkreten Inhalt hier).

Was den Aufbau, von dem XML angeht, so ist das halt so ein Pseudo-SQL mit dem man einen WebDAV-Server abfragen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.
Seite 2 von 2     12   

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