Curl für Webdav (Horde)

Hallo,

für einen Abruf von Webdav-Dateien mittels Curl benötige ich Hilfe, ich komme nicht weiter. Wahrscheinlich hänge ich an der Authentifizierung.

Bislang hatte ich meine Kalender-Dateien (ICS) bei Web.de liegen und - wie hier beschrieben - per PHP-Script über Webdav abgerufen und in IPS verarbeitet. Aus dienstlichen Gründen war es nötig, das zu ändern und auf Horde/Kronolith umzusteigen. Nun funktioniert folgendes Skript nicht mehr:

$url = "https://USER:PASSWORT@WEBDAVURL/kalender.ics"; 

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_URL, $url);

    $file_txt = IPS_GetKernelDir()."media\\Kalender\\kalender.txt";
    $fp = fopen($file_txt, 'wb');

    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

    curl_exec ($ch);
    curl_close ($ch);
    fclose($fp); 

Das Skript braucht ewig und bricht mit einem Timeout ab. Wenn ich „CURLOPT_SSL_VERIFYPEER“ auskommentiere, läuft es zwar, aber es kommt nix an.

Die neue URL ist kein Pfad, sondern offenbar ein Skript (https://SERVER/horde/rpc.php/kronolith/USER/ZEICHEN-SALAT.ics). Ich habe User und Passwort auch schon versucht über CURLOPT_USERPWD zu setzen und mit CURLOPT_HTTPAUTH experimentiert - aber es bleibt laienhaftes Stochern im Nebel. Ehrlich gesagt versteh ich nicht mal die Beschreibungen bei php.net zu „curl_setopt“, weil ich nicht weiß, welche Optionen ich benötige. :frowning:

Zwischenzeitlich hatte ich zumindest mal ein Authentifikationsproblem in der lokalen kalender.txt gespeichert, aber mittlerweile kommt gar nix mehr an; die Datei bleibt leer.

Wenn mich jemand aufs richtige Gleis setzen könnte, wäre das klasse!

Dank und Grüße
galleto

Keiner mit Curl-Kenntnissen? - Ich nehme auch hilfreiche Suchbegriffe, es muss kein fertiges Skript sein. :wink:

Grüße
galleto

php hatte bis zur ganz aktuellen Beta ein Problem mit der ausgelieferten SSL DLL. Solltest du also nicht die aktuellste Beta nutzen, mal die alten DLLs einspielen. Vielleicht hilft das.

Es lag dann doch nicht an PHP. Mit folgenden Curl-Optionen klappt es jetzt:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	curl_setopt($ch, CURLOPT_USERPWD, "$webdav_username:$webdav_password");

:slight_smile:

EDIT: Die Timeouts kommen je nach URL immernoch. Bei manchen funktionierts, bei anderen nicht. Das dürfte aber ein Problem der Quelle sein.

Grüße
galleto