Guten Morgen.
Ich muss einen Migrator von Listen eines Sharepoint Portal Server (Microsoft) zu einer Wiki erstellen.
Was sich Anfangs als 0815-Parser anhört stellt sich als deutlich schwerer als ich dachte.
Ich habe leider keinen Zugriff auf die MsSQL-Datenbank und muss so andere Wege gehen.
Im Forum fand ich dazu nur 1 Topic und dieser war leider unbeantwortet bzw. hat das Thema auch nicht wirklich getroffen. Aber ich habe dem Threadersteller mal eine PM geschrieben.
Meine erste Idee war folgende:
- Auf Server zugreifen, Quelltext speichern und per Regex die gewünschten Informationen herauszubekommen. Doch dies entpuppte sich als schwerer Weg, da die Authentifizierung bei dem Portal Server via NTLM funktioniert.
Mit Hilfe einiger Website (1, 2 (pear),3) konnte ich am Ende zwar NTLM verstehen aber mit PHP anwenden war nicht so einfach.
Letztendlich konnte ich es in Java hinkriegen und musste feststellen, dass die gewollten Informationen per Javascript in die Website eingeführt werden und so hatte ich nun zwar Zugriff auf den gewollten Quelltext bloß ohne wirklichen Inhalt.
- Durch Zufall stoß ich dann auf die Webdienste vom Portal-Server ([Servername]/_vti_bin/Lists.asmx). Diesen spricht man per einfache SOAP-Anfrage an.
Microsoft gibt folgendes Beispiel an:
Problematisch dabei ist, dass man sicher wieder per NTLM authentifizieren muss und hier bin ich auch stecken geblieben. Im Internet findet man zu diesem Thema nur VB.Net- oder C#-Skripte, die dies mit Hilfe von "System.Net.CredentialCache.DefaultCredentials" lösen. (Beispielskript, msdn: Sichere Datenübertragung mit XML Web Services)
Aber wie ich das per PHP lösen könnte ist unauffindbar. Die Benutzerdaten weiß ich und möchte sie eigtl. nur in die SOAP-Anfrage mitgeben (Header oder sonst was)
Mein MiniBeispiel-Code:
Gibt diese Fehlermeldung aus, da ich mich nicht authentifizieren kann bzw. es falsch anwende:
Hat jemand eventuell nen Rat?
nico
----
Daten:
PHP Version 5.2.3 (Testumgebung)
PHP Version 5.2.1 (späterer Server)
Ich muss einen Migrator von Listen eines Sharepoint Portal Server (Microsoft) zu einer Wiki erstellen.
Was sich Anfangs als 0815-Parser anhört stellt sich als deutlich schwerer als ich dachte.
Ich habe leider keinen Zugriff auf die MsSQL-Datenbank und muss so andere Wege gehen.
Im Forum fand ich dazu nur 1 Topic und dieser war leider unbeantwortet bzw. hat das Thema auch nicht wirklich getroffen. Aber ich habe dem Threadersteller mal eine PM geschrieben.
Meine erste Idee war folgende:
- Auf Server zugreifen, Quelltext speichern und per Regex die gewünschten Informationen herauszubekommen. Doch dies entpuppte sich als schwerer Weg, da die Authentifizierung bei dem Portal Server via NTLM funktioniert.
Mit Hilfe einiger Website (1, 2 (pear),3) konnte ich am Ende zwar NTLM verstehen aber mit PHP anwenden war nicht so einfach.
Letztendlich konnte ich es in Java hinkriegen und musste feststellen, dass die gewollten Informationen per Javascript in die Website eingeführt werden und so hatte ich nun zwar Zugriff auf den gewollten Quelltext bloß ohne wirklichen Inhalt.
- Durch Zufall stoß ich dann auf die Webdienste vom Portal-Server ([Servername]/_vti_bin/Lists.asmx). Diesen spricht man per einfache SOAP-Anfrage an.
Microsoft gibt folgendes Beispiel an:
Code:
POST /_vti_bin/Lists.asmx HTTP/1.1 Host: Servername Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://schemas.microsoft.com/sharepoint/soap/GetList" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <listName>string</listName> </GetList> </soap:Body> </soap:Envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetListResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <GetListResult> <xsd:schema>schema</xsd:schema>xml</GetListResult> </GetListResponse> </soap:Body> </soap:Envelope>
Aber wie ich das per PHP lösen könnte ist unauffindbar. Die Benutzerdaten weiß ich und möchte sie eigtl. nur in die SOAP-Anfrage mitgeben (Header oder sonst was)
Mein MiniBeispiel-Code:
PHP-Code:
<?php
$client = new SoapClient('http://Servername/_vti_bin/Lists.asmx?WSDL');
$credentials = array('username'=>'username','password'=>'passwort');
$auth = new SoapVar($credentials, SOAP_ENC_OBJECT);
$res = $client->GetListCollection();
var_dump($res);
?>
Code:
Fatal error: Uncaught SoapFault exception: [HTTP] Unauthorized in C:\Programme\xampp\htdocs\test.php:9 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://servername...', 'http://schemas....', 1, 0) #1 [internal function]: SoapClient->__call('GetListCollecti...', Array) #2 C:\Programme\xampp\htdocs\test.php(9): SoapClient->GetListCollection() #3 {main} thrown in C:\Programme\xampp\htdocs\test.php on line 9
nico
----
Daten:
PHP Version 5.2.3 (Testumgebung)
PHP Version 5.2.1 (späterer Server)
Kommentar