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.
Erweiterte Verwendung (Requests Official)
Recommended Posts