upload zu Webdav

Django, Flask, Bottle, WSGI, CGI…
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Hallo, ich suche eine einfache Möglichkeit, wie ich eine Dateien zum Webserver (webdav) schicke. Gibt es eine einfache Sache oder muss ich ein extra Modul verwenden?
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Es gibt einen Webdav-Client, womit du via Python Daten an einen Webdav-Server schicken kannst: https://pypi.org/project/webdavclient/
When we say computer, we mean the electronic computer.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

OK danke.
Gibt es auch etwas ohne Modul wie z.b. "url open" oder so wo man das Passwort und Name eingeben kann?
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Ich kann mir vorstellen dass das Verwenden der Python-Webdav-Lib den Up/Download auf Webdav-Elemente deutlich entspannter gestaltet, als bspw. über Requests eine Anfrage zusammen zu schrauben. Ich sehe auch den Vorteil nicht, warum man es ohne Webdav-Lib machen sollte, da du so oder so eine zusätzliche Lib verwendest. Oder geht es dir um den Lerneffekt?

Webdav arbeitet auf der Anwendungsschicht und verwendet wie normale Webserver auch HTTP Port 80, also alles keine Magie.
When we say computer, we mean the electronic computer.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Es geht mir auch über den Lerneffekt.
Webdav arbeitet auf der Anwendungsschicht und verwendet wie normale Webserver auch HTTP Port 80, also alles keine Magie
Mein Webdav hat aber einen anderen Port, aber sollte ja kein Problem darstellen.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du lernen willst, geht das auch nur mit urllib. Aber dann wirst du VIEL lernen müssen. Mehr als du dir glaube ich vorstellst. Benutz lieber die Bibliothek.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

So ich hab es jetzt auf meinen Ubuntu 16.04 PC getestet. Webdav Verzeichnis ist in "/var/www/webdav" und auch über"http:// localhost erreichbar
ich hab eine Datei und einen Ordner (namens "prob") drin mit Gruppe und Benutzer "www-data.
bei client.check("prob") bekomme ich True und bei client.check("probe") False. Also funktioniert es schon mal grundsätzlich.
Jetzt möchte ich aber etwas uploaden von meinen Rechner zu Webdav. Der Pfad ist auf den Rechner in /home/matze/run.py.
Hier mein code:

Code: Alles auswählen

client.upload_sync(remote_path="run.py", local_path="/home/matze/run.py")
Aber die Datei wird leider nicht hochgeladen,da brauch ich leider nochmal eure Hilfe.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was sagt das Apache Logfile?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

]Das sagt das:

Code: Alles auswählen

 - - [02/Jun/2018:11:55:29 +0200] "PUT /run.py HTTP/1.1" 405 533 "-" "PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3" 
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Laut HTTP error Code 405 ist das halt nicht erlaubt. Da musst du deine Server entsprechend aufsetzen.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich hab das ganze ohne username und Passwort (nur zum testen) eingerichtet, kann das damit was zu tun haben?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Genau das war der Fehler, man MUSS ein Benutzername und Passwort vergeben.
Sonst hat man keine Rechte da etwas zu verändern mit den Script.
Danke .
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Jetzt hängt es noch am ssl. Ich hab mir selbst ein ssl Protokoll erstellt, aber ich komme einfach nicht zum connect.
Habe schon alle 3 Varianten versucht die in der Docu stehen.
Über mein Browser klappt dass: https://mydyndns.net:port
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Welche drei Varianten gibt es denn? Und was ist die Fehlermeldung?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Ich habe die 3 Options https://pypi.org/project/webdavclient/ Versucht.
Beim 3. hab ich meine Adresse (https://meinedynds.net:port) eingegeben und bei "cert_path" und "key_path" die Pfade eingegeben, die auch in meiner apache2 ssl.conf eingetragen sind.
Als Fehler wird mir das ausgegeben:

Code: Alles auswählen

 raise NotConnection(self.webdav.hostname)
webdav.exceptions.NotConnection: Not connection with https://meinserver.net:port
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Leider ersetzt webdavclient alle Fehlermeldungen durch ziemlich unsinnvolle. Was meldet es denn, wenn Du beim Client verbose=True setzt?
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Sirius3 hat geschrieben: Montag 4. Juni 2018, 05:20 Was meldet es denn, wenn Du beim Client verbose=True setzt?
Was meinst du damit genau?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

genau das, was ich geschrieben habe. Die Ausgaben sind zu dürftig, um irgendwelche Feherursachen zu finden, daher mehr Ausgabe durch verbose, in der Hoffnung, dass man damit auf den Grund kommt.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Sorry, aber ich muss nochmal fragen, wo soll ich "verbose=True" setzen?
So sieht mein aktuelles Script aus:

Code: Alles auswählen

import webdav.client as wc

options = {'webdav_hostname': "https://meinedyndns.net:Port",'webdav_login':  "xxxx", 'webdav_password': "xxxxx",
          'cert_path':  "/etc/ssl/certs/apache.crt",'key_path': "/etc/ssl/private/apache.key"}

client = wc.Client(options)

a = client.check("prob/")

print(a)
Bei xxx sind natürlich die richtigen Werte gesetzt.
Antworten