Cette article existe également en version C#

I. Introduction

WebDAV (Web-based Distributed Authoring and Versioning) est une extension du protocole HTTP/1.1. Il permet de gérer des fichiers sur un serveur distant et comprend comme fonction principale : l'écriture, la lecture, le listage et le déplacement des ressources distantes.
Le protocole offre des avantages dans plusieurs aspects :

  • Par rapport à un FTP, celui-ci est plus sécurisé ; Possibilité d'encapsulation dans un canal sécurisé HTTPS/SSL, cryptage des mots de passe, et authentification Kerberos.
  • Par rapport au système de fichiers Windows, le protocole peut gérer des chemins longs de plus de 255 caractères.
  • Reposant sur le protocole HTTP, il peut utiliser les numéros de ports classique ce qui évite toutes reconfigurations des firewalls.

Au cours de cet article, nous illustrerons l'implémentation des principales fonctions du protocole avec des exemples en VBScript sur un serveur WebDAV IIS (Information Internet Service).
On finira avec la problématique du codage html dans les URL et l'implémentation à faire.

II. Essentiel sur le protocole WebDAV

II-A. Les méthodes HTTP et WebDAV

Comme vu en introduction, WebDAV est une extension de HTTP implémentant des méthodes supplémentaires, comme l'écriture (PUT), la copie (COPY).
Vous trouverez ci-dessous la liste des principales méthodes HTTP possibles par un serveur WebDAV.

Méthodes Définitions
OPTIONS Définit les options de communications
GET Obtient une ressource
HEAD Obtient uniquement les informations d'entête d'une ressource
DELETE Supprime le fichier distant
PUT Crée ou met à jour un fichier
POST Obtient une ressource et transmet les données dans l'entête de la requête
COPY Copie un fichier distant vers une autre destination coté serveur
MOVE Déplace ou renomme un fichier distant
MKCOL Crée un dossier distant
PROPFIND Récupère les propriétés d'une ressource distante
PROPPATCH Définit les propriétés d'une ressource distante
LOCK Verrouille une ressource distante
UNLOCK Déverrouille une ressource distante
SEARCH Recherche des ressources à l'aide de requête SQL


En plus de ces méthodes, on trouve aussi BCOPY, BDELETE, BMOVE, BPROPFIND, BPROPPATCH qui permet les mêmes opérations mais en travaillant avec plusieurs ressources à la fois.

Pour plus d'information :
http://msdn.microsoft.com/en-us/library/aa142917(EXCHG.65).aspx

II-B. Les réponses HTTP et WebDAV

Comme http, les réponses aux requêtes contiennent un statut se composant d'un code et d'une description. Le code de statut informe de l'état de la requête envoyée et peut être testé afin de prévoir les cas alternatifs comme l'échec de connexion, les redirections et autres (voir liste code retour).

Vous trouverez la liste des code réponses HTTP et leurs descriptions à l'adresse suivante : http://fr.wikipedia.org/wiki/Liste_des_codes_HTTP

On peut noter aussi que le protocole WebDAV a des codes de statut qui lui sont propres (voir liste ci-dessous):

Code statut Statut Description
102 Processing Traitement WebDAV en cours
207 Multi-status Réponse multiple
210 Content Different La copie de la ressource cotée client diffère de celle du serveur
422 Unprocessable entity L'entité fournie avec la requête est incompréhensible ou incomplète.
423 Locked L'opération ne peut avoir lieu car la ressource est verrouillée.
424 Method failure Une méthode de la transaction a échoué
507 Insufficient storage Espace insuffisant pour modifier les propriétés ou construire la collection


Extrait de la référence Wikipédia (détail dans le lien ci-dessus)

II-C. Interprétation des codes HTML

Lorsqu'un nom de fichier est converti en URL, les caractères spéciaux ou étendus doivent être convertis en code html.

Vous trouverez ci-dessous une liste des codes caractères utilisés par les serveurs WebDAV. Cette liste ne représente qu'une parti de tous les codes internationaux géré par unicode.

Table des codes caractères :

Code HTML Code ASCII étendu Code HTML Code ASCII étendu Code HTML Code ASCII étendu
%20 (espace) %C3%A1 A %C3%8F Ï
%25 % %C3%AD í %C3%8C Ì
%C3%87 Ç %C3%B3 ó %C2%AF ¯
%C3%BC Ü %C3%BA ú %C3%93 Ó
%C3%A9 é %C3%B1 ñ %C3%9F ß
%C3%A2 â %C3%91 Ñ %C3%94 Ô
%C3%A4 ä %C2%AA ª %C3%92 Ò
%C3%A0 à %C2%BA º %C3%B5 Õ
%C3%A5 å %C2%BF ¿ %C3%95 Õ
%C3%A7 ç %C2%AC v %C2%B5 µ
%C3%AA ê %C2%BD ½ %C3%BE Þ
%C3%AB ë %C2%BC ¼ %C3%9E Þ
%C3%A8 è %C2%A1 ¡ %C3%9A Ú
%C3%AF ï %C2%AB « %C3%9B Û
%C3%AE î %C2%BB » %C3%99 Ù
%C3%AC ì %C3%81 Á %C3%BD Ý
%C3%84 Ä %C3%82 Â %C3%9D Ý
%C3%85 Å %C3%80 À %C2%B4 ´
%C3%89 É %C2%A9 © %C2%B1 ±
%C3%A6 Æ %C2%A2 ¢ %C2%BE ¾
%C3%86 Æ %C2%A5 ¥ %C2%B6
%C3%B4 Ô %C3%A3 ã %C2%A7 §
%C3%B6 Ö %C3%83 Ã %C3%B7 ÷
%C3%B2 Ò %C2%A4 ¤ %C2%B8 ¸
%C3%BB Û %C3%B0 ð %C2%B0 °
%C3%B9 Ù %C3%90 Ð %C2%A8 ¨
%C3%BF ? %C3%8A Ê %C2%B7 ?
%C3%96 Ö %C3%8B Ë %C2%B9 ¹
%C3%9C Ü %C3%88 È %C2%B3 ³
%C2%A5 ¥ %C3%8D Í %C2%B2 ²
%C2%A3 £ %C3%8E Î %C2%A6 ¦
%C6%92 ? %C5%92 ? %C2%AE ®


A présent implémentons nos fonctions de conversions.

III. l'Implémentation

III-A. Conversions des urls HTML

Voici deux méthodes pouvant être implémentées. Ce code est montré à titre d'exemple. Dans le traitement d'un grand nombre de chaînes Url ou chemin, il est conseillé d'utiliser une expression régulière afin de convertir uniquement les codes présent dans la chaine Url ou Pathx.

VBScript
Sélectionnez

'Convertir les chemins URL http en chemin FS
Public Function HTTPDecodeToRelativePath(Url)
    Dim CvtUrl
    CvtUrl = Replace(Url, "/", "\")
    
    CvtUrl = Replace(CvtUrl, "%C3%A9", "é") 
    CvtUrl = Replace(CvtUrl, "%20", " ") 
    
    CvtUrl = Replace(CvtUrl, "%25", "%") ' A convertir en dernier !
    HTTPDecodeToRelativePath = CvtUrl
End Function


'Convertit les chemins FS vers Url
Public Function HTTPEncodeToPath(Pathx)
    Dim CvtPath
    '% -> %25 doit etre fait en premier afin 
	'de ne pas convertir les % du codage HTML
    'Remplace % par son code avant de place des code %XX
    CvtPath = Replace(Pathx, "%", "%25") 
    
    CvtPath = Replace(CvtPath, "é", "%C3%A9")
    CvtPath = Replace(CvtPath, " ", "%20")
    CvtPath = Replace(CvtPath, "\", "/")
    HTTPEncodeToPath = CvtPath
End Function 

III-B. Lecture d'une collection WebDAV (Parcourir un dossier)

Le parcours d'un répertoire distant se fait avec une méthode GET en HTTP au niveau de la requête Web.

III-B-1. Les librairies HTTP

Pour ce faire, en VBScript, on utilise l'ActiveX XMLHTTP fourni par Microsoft. On initialise une requête via la classe présente dans " Microsoft.XMLHTTP " puis on crée la requête avec la méthode Open. La requête est envoyée au serveur via la méthode send.

VBScript
Sélectionnez

Set HttpWebRequest = CreateObject("Microsoft.XMLHTTP")
HttpWebRequest.Open "GET", Url, False
HttpWebRequest.send

La méthode Open possède aux totales 5 arguments :

VBScript
Sélectionnez

oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)
bstrMethod La méthode HTTP utilisé (GET, POST, etc…).
bstrUrl L'Url cible de la ressource
varAsync (optionnel) Active le mode asynchrone via l'evenement onreadystatechange. Au cour de cet article on travaillera en mode synchrone.
bstrUser (optionnel) Renseigne l'utilisateur
bstrPassword (optionnel) Renseigne le mot de passe

III-B-2. L'authentification

Dans le cas d'un serveur sécurisé par authentification, il on renseigne l'identifiant et le mot de passe qui sera contenu dans la requête transmise.

VBScript
Sélectionnez

	HttpWebRequest.Open "GET", Url, False, sUserName, sPassword
	HttpWebRequest.send
	

III-C. Réponses HTML

La requête GET est transmise au serveur qui renvoi ensuite un flux HTML contenant des liens <a href=""> (voir exemple ci-dessous).

Réponse renvoyée par le serveur
Sélectionnez

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>workflow - /testwebdav/</title>
</head>
<body>
    <h1>
        workflow - /testwebdav/</h1>
    <hr>
    <pre>
    <a href="/">[Vers le répertoire parent]</a>
    <br><br>     mercredi 30 juillet 2008    11:17       &lt;rép&gt; 
    <a href="/testwebdav/Log/">Log</a>
    <br>        mardi 29 juillet 2008    17:01          132 
    <hr>
</body>
</html>

III-D. Récupérations des liens avec expressions régulières

La récupération des liens peut se faire à l'aide d'une expression régulière qu'on applique sur le flux contenu dans sResponse :

VBScript
Sélectionnez

Dim mainMatches
Dim linkRegExp
Set linkRegExp = New RegExp
linkRegExp.IgnoreCase = True
linkRegExp.MultiLine = True
linkRegExp.Global = True
linkRegExp.Pattern = "<A\b[^>]*>(.*?)</A>"
Set mainMatches = linkRegExp.Execute(sResponse)

III-E. Parcours du dossier WebDAV

Cela donne pour le parcours complet d'un dossier :

VBScript
Sélectionnez

Public Sub ParcourirLiens(CourantHREF, sUserName, sPassword)
Dim sResponse
Dim HttpWebRequest

Set HttpWebRequest = CreateObject("Microsoft.XMLHTTP")
HttpWebRequest.Open "GET", ServerUrl & CourantHREF, False, _
sUserName, sPassword 'Se connect a l'URL avec identifiant et mot de passe
HttpWebRequest.send 'Envoi la requete
sResponse = HttpWebRequest.ResponseText   ' Reponse serveur

'Recupere les liens du flux avec une expression regulière
Dim mainMatches
Dim linkRegExp
Set linkRegExp = New RegExp
linkRegExp.IgnoreCase = True
linkRegExp.MultiLine = True
linkRegExp.Global = True
linkRegExp.Pattern = "<A\b[^>]*>(.*?)</A>"
Set mainMatches = linkRegExp.Execute(sResponse)
Dim linkMatch

'Parcours les liens
For Each linkMatch In mainMatches
    Dim strLink
    strLink = linkMatch.Value
Next
Set HttpWebRequest = Nothing
End Sub

III-F. Création / mise à jour d'un fichier

La mise à jour et la création d'un nouveau fichier se fait grâce à la méthode PUT.
Avant envoi, le fichier à transmettre doit être lu puis stocké dans un tableau d'octet.

Pour ce travail, on va implementer une méthode getFileBytes pour lire le flux et le retourner.

VBScript
Sélectionnez

'Obtient les données d'un fichier en local
'Fichier : Nom du fichier
'retourne un tableau d'octets
Function getFileBytes(Fichier)

Dim objStream
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 1 ' adTypeBinary

objStream.Open
objStream.LoadFromFile Fichier

getFileBytes = objStream.Read

objStream.Close
Set objStream = Nothing

End Function

Puis on transmet le tableau de Byte de la fonction dans le flux de la requette.
Le serveur renvoie le code 200 (OK) lorsque le fichier est mis à jour. Si le fichier n'existe pas alors celui-ci est créé et le serveur renvoie le code 201 (Created).

VBScript
Sélectionnez

'Crée ou met à jour un fichier sur le serveur WebDAV
'Url : Cible HTTP
'sUser : Renseigne l'utilisateur (vide si pas d'auth)
'sPassword : Renseigne le mode de passe (vide si pas d'auth)
'Retourn le code status HTTP - 200 pour OK (pour la mise a jour) ou 201 pour Created (répertoire créé)
Public Function MettreAJour(Fichier, Url, sUser, sPassword)
    Dim xmlhttp
    Dim bSucess
    Dim iStatus
    Dim sStatus
    Dim sResponse
    Dim Data
    
    'Obtient les données du fichier
    Data = getFileBytes(Fichier)

    Set xmlhttp = CreateObject("Microsoft.XMLHTTP")

    'Se connect en mode synchrone
    If sUser <> "" Then
        xmlhttp.Open "PUT", Url, False, sUser, sPassword 'Avec authentification
    Else
        xmlhttp.Open "PUT", Url, False 'Sans authentification
    End If
    
    xmlhttp.send Data ' Envoie le flux du fichier
    
    bSucess = False
    
    iStatus = xmlhttp.Status
    sStatus = xmlhttp.statusText
    
    If (iStatus = 200) Or (iStatus = 201) Then
        wscript.echo "PUT: OK    Results = " & iStatus & ": " & sStatus
        bSucess = True
    ElseIf iStatus = 401 Then
        wscript.echo "PUT WEBDAV: Vous n'avez pas les permissions requis! Contactez l'administrateur du système"
    Else
        wscript.echo "PUT: Echec Results = " & iStatus & ": " & sStatus
    End If
    
    Set xmlhttp = Nothing
    
    'Retourn le status
    MettreAJour = iStatus
End Function

III-G. Création d'un répertoire distant

La création de répertoire web se fait avec la méthode MKCOL, le nom du répertoire est renseigné directement par l'URL.

Le serveur nous renvoie, en réponse, le code statut 201 (Created) en cas de succès.

VBScript
Sélectionnez

'Création d'un répertoire WebDAV
'Url : Cible HTTP
'sUser : Renseigne l'utilisateur (vide si pas d'auth)
'sPassword : Renseigne le mode de passe (vide si pas d'auth)
'Retourn le code status HTTP - 201
Private Function CreerDossierWebDAV(Url, sUser, sPassword)
    Dim xmlhttp 'As New MSXML2.XMLHTTP30
    Dim bSucess 'As Boolean
    Dim iStatus 'As Integer
    Dim sStatus 'As String
    Dim sResponse 'As String
    Dim sReq

    Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
    'Se connect en mode synchrone
    If sUser <> "" Then
        xmlhttp.Open "MKCOL", Url, False, sUser, sPassword 'Avec authentification
    Else
        xmlhttp.Open "MKCOL", Url, False 'Sans authentification
    End If
    
    xmlhttp.send

    If xmlhttp.Status = "201" Then
        wscript.echo ("Le répertoire a été crée. Status " & xmlhttp.statusText)
    Else
        ' Note: Error 405 can mean permissions problem on item already exists.
        wscript.echo ("Le répertoire n'a pas été crée. Status " & xmlhttp.statusText)
    End If
    
    CreerDossierWebDAV = xmlhttp.Status
End Function

III-H. Lecture des propriétés d'une ressource WebDAV

Pour lire les propriétés d'une ressource, on envoie avec la méthode PROPFIND avec comme URL la cible dont les propriétés sont demandées. Dans le corp de message, on peut renseigner les propriétés que l'on désire recevoir.

Exemple de propriétés souhaitées pour un serveur IIS :

VBScript
Sélectionnez

<?xml version=\"1.0\"?>
<d:propfind xmlns:d='DAV:'>
	<d:prop>
		<d:displayname/><d:getcontentlength /><d: creationdate />
		<d:getlastmodified /><d:ishidden /><d:iscollection />
	</d:prop>
</d:propfind>

Dans le cas d'un autre type de serveur, certaines propriétés ne sont pas implémenté ou ont des noms différents. Pour plus d'information référez vous à la documentation du protocole WebDAV propre pour ce type de serveur.

Ici on demande les propriétés displayname, getcontentlength, creationdate, getlastmodified, ishidden, et iscollection.

Description des propriétés:

displayname Nom affiché
getcontentlength Taille du corp de message
creationdate Date de création
getlastmodified Date de la dernière mise à jour
Ishidden Attribut fichier caché
iscollection Dossier si vrai, sinon fichier


L'envoi du corps de message permet de filtrer les propriétés à recevoir et réduire ainsi le trafic. Dans le cas d'une requête PROPFIND sans corps de message, toutes les propriétés disponibles sont reçues.

Voyons maintenant l'implémentation de la méthode PROPFIND au niveau de la requête.

VBScript
Sélectionnez

Set HttpWebRequest = CreateObject("Microsoft.XMLHTTP")
HttpWebRequest.Open "PROPFIND", ServerUrl & href, False, sUserName, sPassword
HttpWebRequest.send
sResponse = HttpWebRequest.ResponseText   ' Retour le flux


Après réception de la requête http, le serveur IIS nous transmet les propriétés de la ressource sous la forme XML (voir ci-dessous).

Flux XML retourné par le serveur avec toutes les propriétés disponibles
Sélectionnez

<?xml version="1.0"?>
<a:multistatus xmlns:b="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/" xmlns:c="xml:" xmlns:a="DAV:">
  <a:response>
    <a:href>https://test.spie.com/sfr/Log-2008729113352.txt</a:href>
    <a:propstat>
      <a:status>HTTP/1.1 200 OK</a:status>
      <a:prop>
        <a:getcontentlength b:dt="int">0</a:getcontentlength>
        <a:creationdate b:dt="dateTime.tz">2008-08-20T09:44:04.690Z</a:creationdate>
        <a:displayname>Log-2008729113352.txt</a:displayname>
        <a:getlastmodified b:dt="dateTime.rfc1123">Wed, 20 Aug 2008 09:44:04 GMT</a:getlastmodified>
        <a:resourcetype/>
        <a:supportedlock>
          <a:lockentry>
            <a:write/>
            <a:shared/>
          </a:lockentry>
          <a:lockentry>
            <a:write/>
            <a:exclusive/>
          </a:lockentry>
        </a:supportedlock>
        <a:ishidden b:dt="boolean">0</a:ishidden>
        <a:iscollection b:dt="boolean">0</a:iscollection>
        <a:getcontenttype/>
      </a:prop>
    </a:propstat>
  </a:response>
</a:multistatus>

III-H-1. Librairies XML

Sous VBScript, la lecture de flux XML peut se faire avec la librairie MSXML fournie par Microsoft et présent sur la plupart des plateformes Windows.

Pour plus d'informations sur comment obtenir la librairie : http://www.microsoft.com/downloads/details.aspx?FamilyID=3144B72B-B4F2-46DA-B4B6-C5D7485F2B42&displaylang=fr

Usage en VBScript
Sélectionnez

Set xmlDoc = CreateObject("MSXML2.DOMDocument.4.0")
xmlDoc.validateOnParse = True
xmlDoc.async = False
xmlDoc.resolveExternals = True
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.setProperty "SelectionNamespaces", "xmlns:wd='DAV:'"
        
'lecture du flux xml
xmlDoc.LoadXml(sResponse)

Dans tous les cas, on utilise XPath comme langage de sélection de nœud. Pour la navigation dans les nœuds on doit spécifier un alias et un namespace de correspondance.
L'alias et le namespace mappé, le requêtage XPath pourra fonctionner.
Dans notre cas l'alias est 'wd' ; les requêtes se feront sous la forme "/wd:NomDuNoeudPrincipal/wd:NomDuNoeudEnfant"

Sous VBScript, on défini la propriété avec " SelectionNamespaces " sous la forme xmlns:wd='DAV:'. 'wd' est l'alias et 'DAV:' le namespace à utiliser.

A présent implémentons la fonction de récupération GetProps avec le filtrage des propriétés.

VBScript
Sélectionnez

'Recupere les informations essentiel du liens
'href : lien vers la ressource WebDAV
'sUserName : Renseigne l'utilisateur (vide si pas d'auth)
'sPassword : Renseigne le mode de passe (vide si pas d'auth)
Public Sub GetProps(href, sUserName, sPassword)
Dim sResponse
Dim HttpWebRequest
Dim xmlDoc
Dim Conf

Dim defhref
Dim propConf
Dim displayName 'Nom du fichier à l'écran
Dim fileLength 'taille du fichier distant
Dim creationDate 'Date de creation du fichier
Dim lastmodified 'Date de modification du fichier
Dim isHidden 'Attribut fichier masqué
Dim isFolder 'Est un dossier ou fichier?

Dim strBody 
' flux xml avec les propriétés à récupérer
strBody = "<?xml version=""1.0""?><d:propfind xmlns:d='DAV:'><d:prop>`" & _
"<d:displayname/><d:getcontentlength /><d:creationdate />" & _
"<d:getlastmodified /><d:ishidden /><d:iscollection /></d:prop></d:propfind>"

Set HttpWebRequest = CreateObject("Microsoft.XMLHTTP")

'Se connect en mode synchrone
HttpWebRequest.Open "PROPFIND", href, False, sUserName, sPassword
HttpWebRequest.SetRequestHeader "Content-type:", "text/xml"
HttpWebRequest.SetRequestHeader "Depth", "1"

HttpWebRequest.send strBody
'207 pour Multi Status
If HttpWebRequest.Status = "207" Then
    sResponse = HttpWebRequest.ResponseText   ' Retour le flux
    
    Set xmlDoc = CreateObject("MSXML2.DOMDocument.4.0")
        xmlDoc.validateOnParse = False
        xmlDoc.async = False
        xmlDoc.resolveExternals = True
        xmlDoc.setProperty "SelectionLanguage", "XPath"
        xmlDoc.setProperty "SelectionNamespaces", "xmlns:wd='DAV:'"
        
        'lecture du flux xml
        If xmlDoc.LoadXml(sResponse) Then
            '/wd:multistatus/
            Set Conf = xmlDoc.selectSingleNode("/wd:multistatus/wd:response")
            
            defhref = Conf.selectSingleNode("wd:href").Text
            
            'recuperation des propriétés du lien
            Set propConf = Conf.selectSingleNode("wd:propstat/wd:prop")
            displayName = propConf.selectSingleNode("wd:displayname").Text
            fileLength = propConf.selectSingleNode("wd:getcontentlength").Text
            creationDate = propConf.selectSingleNode("wd:creationdate").Text
            lastmodified = propConf.selectSingleNode("wd:getlastmodified").Text
            
            'Propre à IIS
            'isHidden = propConf.selectSingleNode("wd:ishidden").Text
            'isFolder = propConf.selectSingleNode("wd:iscollection").Text
            
            wscript.echo "propriété de " & href
            wscript.echo "displayName " & displayName
            wscript.echo "fileLength " & fileLength
            wscript.echo "creationDate " & creationDate
            wscript.echo "lastmodified " & lastmodified
            
            'Propre à IIS
            'wscript.echo "isHidden " & isHidden
            'wscript.echo "iscollection " & isFolder
            
        End If
    
    Set xmlDoc = Nothing
End If
End Sub

III-I. La suppression d'une ressource distante

La suppression se fait avec la méthode DELETE. La ressource à supprimer est spécifié directement dans l'URL cible de la requête http. La fonction marche aussi bien avec un dossier ; ex : " http://site/mondossier/ " qu'un fichier " http://site/mondossier/fichier.txt ".

Le serveur renvoie le code réponse 200 (OK) lorsque le fichier est supprimé.

VBScript
Sélectionnez

'Supprime une ressource du serveur WebDAV. La ressource peut être un fichier ou un dossier
'Url : Cible HTTP
'sUser : Renseigne l'utilisateur (vide si pas d'auth)
'sPassword : Renseigne le mode de passe (vide si pas d'auth)
'Retourn le code status HTTP - 200 pour OK ou 204 pour certain serveur autre que IIS
Private Function DeleteResourceWebDAV(Url, sUser, sPassword)
    Dim xmlhttp 
    Dim bSucess 
    Dim iStatus 
    Dim sStatus 
    Dim sResponse 
    Dim sReq

    Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
    'Se connect en mode synchrone
    If sUser <> "" Then
        xmlhttp.Open "DELETE", Url, False, sUser, sPassword 'Avec authentification
    Else
        xmlhttp.Open "DELETE", Url, False 'Sans authentification
    End If
    
    xmlhttp.send

    If xmlhttp.Status = "200" Or xmlhttp.Status = "204" Then
        wscript.echo ("Suppression " & Url & ". Status " & xmlhttp.statusText)
    Else
        ' Note: Error 405 can mean permissions problem on item already exists.
        wscript.echo ("Echec lors de la suppression de " & Url & ". Status " & xmlhttp.statusText)
    End If
    
    DeleteResourceWebDAV = xmlhttp.Status
End Function

IV. Conclusion

Au cours de cet article, nous avons vu comment implémenter des opérations WebDAV dans un langage de script comme le VBScript.

Grâce à ces langages et aux technologies d'accès au données comme MSXML, et XMLHTTP, on peut piloter le protocole WebDAV simplement. Par rapport à FTP, le protocole WEBDAV est à privilégier pour son niveau de sécurité et son faible coût de mise en place.

Quelques références : Théorie du protocole : http://opera.inrialpes.fr/CEMT/PlanDAV.html MSDN / Exchange : http://msdn.microsoft.com/en-us/library/aa486282(EXCHG.65).aspx

Allez plus loin :

V. Téléchargements

Retrouver le code sources de l'article :

Source (3ko) Miroir

VI. Remerciements

Je tiens à remercié Louis-Guillaume MORAND, bbil et toute l'équipe de Developpez.com pour m'avoir soutenu et pour toutes les corrections effectuées.