les objets ServerXMLHTTP et IServerXMLHTTPRequest fournissent des méthodes et des propriétés qui permet d'établir une connexion HTTP entre les fichiers ou les objets dur différents serveurs Web.

Set Objet_ServerXMLHTTP = _
                    Server.CreateObject("MSXML2.ServerXMLHTTP")
Set Objet_ServerXMLHTTP = _
                    Server.CreateObject("afba6b42-5692-48ea-8141-dc517dcf0ef1")

L'objet ServerXMLHTTP offre des fonctionnalités similaires à celles de l'objet XMLHTTP. Toutefois, l'objet ServerXMLHTTP ne compte pas sur le contrôle WinInet pour l'accès HTTP vers des documents XML distants.

L'objet ServerXMLHTTP utilise une nouvelle zone client HTTP. Conçu pour les applications serveurs, ce sous-ensemble de sécurité du serveur de WinInet procure une meilleure fiabilité et sécurité de la zone client HTTP.

L'objet ServerXMLHTTP est la plupart du temps utilisé pour :

  • recevoir des documents XML à partir d'une page ASP (Active Server Pages) sur un serveur Web local ou distant par la méthode HTTP GET.
  • envoyer des documents XML vers des pages ASP sur un serveur Web local ou distant par la méthode HTTP POST.
  • envoyer et recevoir la réponse des documents XML à partir d'une page ASP par la méthode HTTP POST.

Il est possible d'utiliser l'objet ServerXMLHTTP, soit indirectement en employant la méthode setProperty de l'objet DOMDocument, soit directement en employant l'objet ServerXMLHTTP lui-même.

L'utilisation indirecte de l'objet ServerXMLHTTP s'effectue par l'intermédiaire de la propriété setProperty de l'objet DOMDocument de la façon suivante :

Dim Objet_Document
Set Objet_Document = _
                           Server.CreateObject("MSXML2.DOMDocument")
Objet_Document.async = false
Objet_Document.setProperty("ServerHTTPRequest", true)
Objet_Document.load("http://nom-serveur/reponse.asp")

Il est nécessaire d'utiliser la méthode setProperty de l'objet DOMDocument pour fixer l'indicateur de la propriété ServerHTTPRequest, lequel indique que l'analyseur doit utiliser la sécurité du serveur de l'objet ServerXMLHTTP, à la place de l'objet de DOMDocument, pour charger simultanément un document XML depuis un serveur.

Comme avec tous les indicateurs de propriété, la propriété ServerHTTPRequest doit être fixée avant l'appel de la méthode load de l'objet DOMDocument, sinon l'analyseur ignorera l'indicateur de propriété.

La valeur de l'indicateur égale à True signifie la création d'un objet ServerXMLHTTP d'arrière-plan, distinct de l'objet DOMDocument.

L'utilisation directe de l'objet de ServerXMLHTTP permet un contrôle procédural beaucoup plus important qu'avec la méthode setProperty précitée.

Plutôt que de récupérer seulement les réponses XML à partir d'un serveur distant, l'objet ServerXMLHTTP permet aux développeurs d'utiliser les méthodes de transmissions GET et POST, aussi bien que la capacité de manipuler des connexions de sécurité de base.

Dim Objet_ServerXMLHTTP
Set Objet_ServerXMLHTTP = _
                 Server.CreateObject ("MSXML2.ServerXMLHTTP")
Objet_ServerXMLHTTP.open("GET", _
                                       "http://nom-serveur/reponse.asp, false)

L'interface IServerXMLHTTPRequest hérite de l'IXMLHTTPRequest et l'étend avec quatre nouvelles méthodes getOption, setOption, waitForResponse et setTimeouts.

Les Propriétés
Propriété
Description
Objet_ServerXMLHTTPRequest.onreadystatechange = GestionnaireEvénement
indique le getionnaire d'événements pour être appelé lorsque la propriété readyState change, en lecture et écriture.
Etat = Objet_ServerXMLHTTPRequest.readyState
représente l'état de la requête, en lecture seule.
Chaîne = Objet_ServerXMLHTTPRequest.responseBody
représente le corps de l'entité de réponse commun tableau d'octets non-signés, en lecture seule.
Stream = Objet_ServerXMLHTTPRequest.responseStream
représente le corps de l'entité de réponse comme un flux de données textuelles, en lecture seule.
Texte = Objet_ServerXMLHTTPRequest.responseText
représente le corps de l'entité de réponse comme une chaîne de caractères, en lecture seule.
Set Objet_XML = Objet_ServerXMLHTTPRequest.responseXML
représente le corps de l'entité de réponse comme analysé par l'analyseur de Microsoft MSXML, en lecture seule.
Valeur = Objet_ServerXMLHTTPRequest.status
représente le code du statut HTTP retourné par une requête, en lecture seule.
Chaîne = Objet_ServerXMLHTTPRequest.statusText
représente le statut de la ligne de réponse HTTP, en lecture seule.
Les Méthodes
Méthode
Description
Objet_ServerXMLHTTP.abort()
annule la requête HTTP courante.
Chaîne = Objet_HttpRequest.getAllResponseHeaders()
récupère les valeurs de tous les entêtes HTTP.
Valeur = Objet_ServerXMLHTTPRequest.getOption(option)
retourne la valeur de l'une des options suivantes :
  • SXH_OPTION_URL_CODEPAGE
  • SXH_OPTION_ESCAPE_PERCENT_IN_URL
  • SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS
  • SXH_OPTION_SELECT_CLIENT_SSL_CERT
Chaîne = Objet_HttpRequest.getResponseHeader(Nom_Entête)
récupère la valeur d'un entête HTTP à partir du corps de la réponse.
Objet_ServerXMLHTTP.open(GET | POST | PUT | PROPFIND, URL_Requête
[, Bool_Async, Nom_Utilisateur, Mot_Passe])
initialise une requête Msxml2.XMLHTTP, et spécifie la méthode, l'adresse URL et les informations d'authentification pour la requête.
Objet_ServerXMLHTTP.send([Nom_Corps])
envoie une requête HTTP vers le serveur et reçois une réponse.
Objet_ServerXMLHTTPRequest.setOption(option) = Valeur
fixe une des options suivantes :
  • SXH_OPTION_URL_CODEPAGE
  • SXH_OPTION_ESCAPE_PERCENT_IN_URL
  • SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS
  • SXH_OPTION_SELECT_CLIENT_SSL_CERT
Objet_ServerXMLHTTPRequest.setTimeouts(Pause_Résolution,
Pause_Connection, Pause_Envoi, Pause_Réception)
indique les paramètrages de pause pour la résolution du nom de domaine, en établissant la connexoion vers le serveur, l'envoi des données et la réception de la réponse. La valeur 1000 représente une seconde.
Objet_HttpRequest.setRequestHeader(Nom_Entête)
spécifie le nom d'un entête HTTP.
Objet_ServerXMLHTTPRequest.waitForResponse(Temps_Secondes)
autorise les requêtes serveurs à suspendre l'exécution tant que l'attente pour une opération d'envoi asychrone soit complète.
Exemple [voir]
Fichier sur le serveur hôte
<html>
  <head>
    <title>La poésie</title>
  </head>
  <body>
    <h2>Les poèmes</h2>
    <a href="http://serveur-hote/serverxmlhttp.asp">
      La locution des pierrots
    </a>
    ...
  </body>
</html>
Fichier : serverxmlhttp.asp
<html>
  <head>
    <%
      Dim Objet_ServerXMLHTTP
      Dim auteur, titre, poeme
      Set Objet_ServerXMLHTTP = _
                               Server.CreateObject("MSXML2.ServerXMLHTTP")
      Objet_ServerXMLHTTP.open _
                              "GET", "http://serveur-distant/reponse.asp", false
      Objet_ServerXMLHTTP.send
      Set titre = _
        Objet_ServerXMLHTTP.responseXML.selectSingleNode "/poesie/titre"
      Set auteur = _
        Objet_ServerXMLHTTP.responseXML.selectSingleNode "/poesie/auteur"
      Set poeme = _
        Objet_ServerXMLHTTP.responseXML.selectSingleNode "/poesie/texte"
    %>
  </head>
  <body>
    <h2>
      <% Response.Write titre.text %>
    </h2>
    <i>(Un poème de <% Response.Write auteur.text %>)</i>
    <p>
      <% Response.Write poeme.text %>
    </p>
  </body>
</html>
Fichier : reponse.asp
<%
  Dim obj_dom
  Set obj_dom = Server.CreateObject("MSXML2.DOMDocument")
  obj_dom.async = false
  obj_dom.load Server.MapPath("source.xml")
  Response.ContentType = "text/xml"
  obj_dom.save Response
%>
Fichier : source.xml
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<!DOCTYPE poesie [
  <!ELEMENT poesie (titre, texte, auteur)>
  <!ELEMENT titre (#PCDATA)>
  <!ELEMENT texte (#PCDATA)>
  <!ELEMENT auteur (#PCDATA)>
]>
<poesie>
  <titre>Locution des pierrots</titre>
  <texte> 
    Je ne suis qu'un viveur lunaire
    Qui fait des ronds dans le bassin
    Et cela, sans autre dessein
    Que de devenir légendaire.

    Retroussant d'un air de défin
    Mes manches de Mandarin pâle,
    J'arrondis ma bouche et - j'exhale
    Des conseils doux de Crucifix

    Ah! oui, devenir légendaire,
    Au seuil des siècles charlatans !
    Mais où sont les Lunes d'antan ?
    Et que Dieu n'est-il à refaire ?
  </texte>
  <auteur>Jules Laforgue</auteur>
</poesie>