[PYTHON] Ich möchte eine Liste der WebDAV-Dateien im Modul Anfragen anzeigen

Anfragen ist praktisch, nicht wahr? Ich denke, es ist das am häufigsten verwendete Python-Modul. Ich wünschte, es wäre standardmäßig anstelle von urllib2 installiert.

Übrigens, um die Dateiliste von WebDAV zu erhalten, muss ich eine Methode namens "PROPFIND" werfen, aber leider unterstützt "Anfragen" dies nicht.

requests.propfind('https://example.com')

Wenn Sie so etwas tun möchten, wird brillant "AttributeError: module'requests" zurückgegeben, das kein Attribut "proppfind" hat.

Verwenden Sie stattdessen die Low-Level-APIs "Request" und "Session" von Requests, um die Methode "PROPFIND" auszulösen.

import requests

def propfind(url):
    
    req = requests.Request('PROPFIND', url, headers={'Depth': '1'})
    prepped = req.prepare()
    
    s = requests.Session()
    resp = s.send(prepped)
    return resp.text

Der Grund, warum headers = {'Depth': '1'} ist, dass, wenn Sie die gesamte Liste in WebDAV erhalten, die Serverseite belastet wird, sodass nur die Liste direkt unter der angegebenen URL abgerufen wird. Die Antwort ist XML, also folgen wir ihr mit "ElementTree". Holen Sie sich einfach das Attribut {DAV:} href. Übergeben wir das XML, das von der zuvor erstellten "propfind (url)" erhalten wurde, an die nächste "xml_to_list (xml)".

import xml.etree.ElementTree as ET

def xml_to_list(xml):
    root = ET.fromstring(xml)
    
    files = [ f.text for f in root.findall('.//{DAV:}href') ]
    
    if (files):
        return files
    else:
        None

Die Notation in "root.findall ()" lautet XPath. Dadurch wird die WebDAV-Dateiliste als Liste zurückgegeben.

Referenz

Erweiterte Verwendung (Requests Official)

Recommended Posts

Ich möchte eine Liste der WebDAV-Dateien im Modul Anfragen anzeigen
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
Ich möchte einen Lebenszyklus in der Aufgabendefinition von ECS festlegen
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
Ich möchte in der Einschlussnotation drucken
Ich möchte die Grafik in 3D sehen! Ich kann einen solchen Traum wahr werden lassen.
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Wenn Sie einen Singleton in Python möchten, stellen Sie sich das Modul als Singleton vor
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich möchte mit Python ein Fenster erstellen
Kopieren Sie die Liste in Python
Ich möchte DB-Informationen in einer Liste speichern
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte komplizierte vier Regeln in der IF-Anweisung der Django-Vorlage verwenden! → Verwenden Sie eine benutzerdefinierte Vorlage
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich möchte dem Anfang einer WAV-Datei 1 Sekunde lang Stille hinzufügen
Ich möchte die Ergebnisse von% time, %% time usw. in einem Objekt (Variable) speichern.
Ich möchte den Dateinamen von DataLoader sehen
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte das Ausführungsergebnis von strace erfassen
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Auch mit JavaScript möchte ich Python `range ()` sehen!
[Python] Ruft die Liste der im Modul definierten Klassen ab
Ich möchte eine Datei mit Python zufällig testen
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte ein Paket von Php Redis installieren
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich möchte R-Datensatz mit Python verwenden
Ich möchte die Sicherheit der SSH-Verbindung erhöhen
Ich wollte die Anzahl der Zeilen in mehreren Dateien wissen und versuchte, sie mit einem Befehl abzurufen
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
So listen Sie Dateien im angegebenen Verzeichnis auf (Suche nach mehreren Bedingungen / Unterverzeichnissen)
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
[Befehl] Befehl zum Abrufen einer Liste von Dateien mit Zeichen voller Breite
Ich möchte viele Prozesse von Python aus starten
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Ich möchte nur die SudachiPy-Normalisierungsverarbeitung verwenden
Ich möchte Betriebsinformationen über die Yahoo-Route erhalten
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen