projman/hlp/fr/tcl/http.htm

262 lines
23 KiB
HTML
Raw Normal View History

2015-10-19 13:27:31 +03:00
<HTML><HEAD>
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
</HEAD>
<BODY>
<div><H3><b>Http&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commandes Internes Tcl</b></H3></div>
<HR ALIGN="center">
<div><b>NOM</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Http - Impl<70>mentation client du protocole HTTP/1.0.
</div><br>
<div><b>SYNTAXE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;"><b>package require http ?2.3?</b> <br>
<b>::http::config </b><i>?options?</i> <br>
<b>::http::geturl </b><i>url ?options?</i> <br>
<b>::http::formatQuery </b><i>list</i> <br>
<b>::http::reset </b><i>token</i><br>
<b>::http::wait </b><i>token</i>
<b>::http::status </b><i>token</i><br>
<b>::http::size </b><i>token</i><br>
<b>::http::code </b><i>token</i><br>
<b>::http::ncode </b><i>token</i><br>
<b>::http::data </b><i>token</i><br>
<b>::http::error </b><i>token</i><br>
<b>::http::cleanup </b><i>token</i><br>
<b>::http::register </b><i>proto port command</i> <br>
<b>::http::unregister </b><i>proto</i>
</div><br>
<div><b>DESCRIPTION</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Le paquetage <b>http</b> fournit la partie client du protocole HTTP/1.0. Le paquetage impl<70>mente les op<6F>rations GET, POST, et HEAD de HTTP/1.0. Il permet la configuration d'un
proxy pour traverser les firewalls Le paquetage est compatible avec la politique de s<>curit<69><b> Safesock</b>, donc il peut <20>tre utilis<69> par un applet non v<>rifi<66> pour r<>cup<75>rer des URL <20> partir d'un ensemble restreint d'h<>tes. Ce paquetage peut <20>tre <20>tendu pour supporter d'autres protocoles de transport HTTP, tel que HTTPS, en fournissant une commande<A><b> socket </b></A>utilisateur, via <b>http::register</b>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">La fonction<b> ::http::geturl</b> effectue une transaction HTTP. Ses <i>options&nbsp; </i> determinent si une transaction GET, POST, ou HEAD est effectu<74>e&nbsp; La valeur de retour de <b>::http::geturl</b> est un jeton pour la transaction. La valeur est aussi le nom d'un tableau dans le ::http namespace qui contient information d'<27>tat concernant la transaction Les <20>l<EFBFBD>ments de ce tableau sont d<>crits dans la section TABLEAU D'ETAT. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si l'option <b>-command</b> est sp<73>cifi<66>e, alors l'op<6F>ration HTTP est faite en arri<72>re-plan. <b>::http::geturl</b> retourne imm<6D>diatement apr<70>s la g<>n<EFBFBD>ration&nbsp; de la requ<71>te HTTP et le callback est appel<65> quand la transaction se termine Pour que cela fonctionne, la boucle d'<27>v<EFBFBD>nement Tcl doit <20>tre active Dans les applications Tk c'est toujours vrai Pour les applications purement Tcl, l'appelant peut utiliser <b>::http::wait</b> apr<70>s l'appel de <b>::http::geturl</b> pour lancer la boucle d'<27>v<EFBFBD>nement.
</div> <br>
<div><b>COMMANDES</b></div> <br>
<div ALIGN="LEFT" style="margin-left: 51px;">
<DL>
<DT><br><b>::http::config</b> ?<i>options</i>?</DT><DD>La commande<b>::http::config</b> est utilis<69> pour fixer et consulter le nom et le port du serveur proxy, et le nom de l'Agent Utilisateur utilis<69> dans les requ<71>tes HTTP Si aucunes options ne sont sp<73>cifi<66>es, alors la configuration courante est renvoy<6F>e Si un seul argument est sp<73>cifi<66>, alors il doit <20>tre un des flags d<>crits ci-dessous Dans ce cas la valeur courante de ce param<61>tre est renvoy<6F>e Autrement, les options seront un ensemble de flags et de valeurs qui definissent la configuration:
<DL>
<DT><br><b>-accept</b> <i>mimetypes</i>
</DT><DD>L'en-t<>te Accept de la requ<71>te La valeur par d<>faut est */*, ce qui signifie que qui tout types de documents sont accept<70>s Autrement vous pouvez donner une&nbsp; liste s<>par<61>e par des virgules de types mime que vous souhaitez recevoir recevoir Par exemple, &quot;image/gif, image/jpeg, text/*&quot;.
</DD>
<DT><br><b>-proxyhost</b> <i>hostname</i>
</DT><DD>Le nom du proxy, s'il existe. Si cette valeur est la cha<68>ne vide, l'URL est contact<63> directement.
</DD>
<DT><br><b>-proxyport</b> <i>number</i>
</DT><DD>Le num<75>ro de port du proxy.
</DD>
<DT><br><b>-proxyfilter</b> <i>command</i>
</DT><DD>La commande est un callback qui est appel<65> pendant <b>::http::geturl</b> pour determiner si un proxy est requis pour un host donn<6E> Un argument, un nom de machine, est ajout<75> <20> <i>command</i> quand elle est appel<65>e Si un proxy est requis, le callback renverra une liste de deux <20>l<EFBFBD>ment contenant le serveur proxy et le port proxy Autrement le filtre renverra une liste vide Le filtre par d<>faut retourne les valeurs des param<61>tres <b>-proxyhost</b> et <b>-proxyport</b> si ils sont non-vides.
</DD>
<DT><br><b>-useragent</b> <i>string</i>
</DT><DD>La valeur de l'en-t<>te Agent Utilisateur dans la requ<71>te HTTP Par d<>faut <b>&quot;Tcl http client package 2.2.&quot;</b>
</DD>
</DL>
</DD>
<DT><br><b>::http::geturl</b> <i>url</i> ?<i>options</i>?
</DT><DD>La commande<b>::http::geturl</b> est la fonction principale dans le paquetage. L'option <b>-</b> <b>query </b>provoque une op<6F>ration POST et l'option <b>-validate</b> provoque une op<6F>ration HEAD; autrement, une op<6F>ration GET est effectu<74>e La commande<b>::http::geturl</b> retourne une valeur <i>token </i>qui peut <20>tre utilis<69>e pour obtenir l'information concernant la transaction Voir les sections TABLEAU D'ETAT et ERRORS pour les d<>tails La commande<b>::http::geturl</b> bloque jusqu'a ce que l'op<6F>ration se termine, <20> moins que l'option <b>-command</b> sp<73>cifie un callback appel<65> quand la transaction HTTP se termine. <b>::http::geturl</b> accepte plusieurs options:
<DL>
<DT><br><b>-blocksize</b> <i>size</i></DT><DD>La taille de bloc utilis<69>e en lisant l'URL. Au plus <i>size</i> octets sont lus en une fois. Apr<70>s chaque bloc, un appel <20> <b>-progress</b> est fait (si cette option est sp<73>cifi<66>e).
</DD>
<DT><br><b>-channel</b> <i>name</i>
</DT><DD>Copie l'URL contenu dans le canal <i>name</i> au lieu de le sauvegarder dans <b>state(body)</b>.
</DD>
<DT><br><b>-command</b> <i>callback</i>
</DT><DD>Appelle <i>callback</i> apr<70>s la fin de la transaction HTTP. Cette option cause le retour imm<6D>diat de <b>::http::geturl</b>. Le <i>callback</i> recoit un argument suppl<70>mentaire qui est le <i>token </i>renvoy<EFBFBD> par <b>::http::geturl</b>. Ce jeton est le nom d'un tableau qui est d<>crit dans la section TABLEAU D'ETAT.Voici un mod<6F>le pour le callback:
<br>proc httpCallback &#123;token} &#123;
<br>&nbsp;&nbsp;&nbsp; upvar #0 &#36;token state
<br>&nbsp;&nbsp;&nbsp; # Acc<63>de au tableau d'<27>tat Tcl
<br>}
</DD>
<DT><br><b>-handler</b> <i>callback</i>
</DT><DD>Appelle <i>callback</i> chaque fois que des donn<6E>es HTTP sont disponibles; si pr<70>sent, rien d'autre ne sera fait avec les donn<6E>es HTTP. Cette fonction attend deux arguments suppl<70>mentaire: la socket pour les donn<6E>es HTTP et le <i>token </i>renvoy<EFBFBD> par <b>::http::geturl</b>. Le jeton est le nom d'un tableau global qui est d<>crit dans la section TABLEAU D'ETAT. La fonction est cens<6E>e renvoyer le nombre d'octets lus de la socket. Voici un mod<6F>le pour le callback:
<br>proc httpHandlerCallback &#123;socket token } &#123;
<br>&nbsp;&nbsp;&nbsp; upvar #0 &#36;token state
<br>&nbsp;&nbsp;&nbsp; # Acc<63>de la socket, et au tableau d'<27>tat Tcl
<br>&nbsp;&nbsp;&nbsp; ...
(exemple: set data &#91;read &#36;socket 1000];set nbytes &#91;string length &#36;data])<br>&nbsp;&nbsp;&nbsp; ..&nbsp;&nbsp; return nbytes
<br>}
</DD>
<DT><br><b>-headers</b> <i>keyvaluelist</i>
</DT><DD>Cette option est utilis<69>e pour ajouter des en-t<>tes <20> la requ<71>te HTTP. L'argument <i>keyvaluelist</i> doit <20>tre une liste avec le m<>me nombre d'<27>l<EFBFBD>ments alternant entre cl<63>s et valeurs. Les cl<63>s deviennent les en-t<>te des champ noms. Les sauts de lignes sont enlev<65>s des valeurs pour que l'en-t<>te ne puisse <20>tre corrompu. Par exemple, si <i>keyvaluelist</i> est <b>Pragma no-cache</b> alors l'en-t<>te suivant est inclus dans la requ<71>te HTTP: <br>
Pragma: no-cache
</DD>
<DT><br><b>-progress</b> <i>callback</i>
</DT><DD>Le <i>callback</i> est appel<65> apr<70>s chaque transfert de donn<6E>es de l'URL. Le callback attend trois arguments additionels: le <i>token </i>de <b>::http::geturl</b>, la taille totale attendue des meta-donn<6E>es contenues dans <b>Content-Length</b>, et le nombre courant d'octets transf<73>r<EFBFBD>s effectivement. La taille totale attendue peut <20>tre inconnue, auquel cas z<>ro est transmis au callback. Voici un mod<6F>le pour le callback progress:<br>
proc httpProgress &#123;token total current} &#123;<br>
&nbsp;&nbsp;&nbsp; upvar #0 &#36;token state<br>
}
</DD>
<DT><br><b>-query </b><i>query</i>
</DT><DD>Ce flag fait effectuer <20> <b>::http::geturl</b> une requ<71>te POST qui transmet la <i>query</i> au serveur. La <i>query</i> doit <20>tre une demande format<61>e x-url-encoding La fonction<b>::http::formatQuery</b> peut <20>tre utilis<69>e pour le formatage.
</DD>
<DT><br><b>-queryblocksize</b> <i>size</i>
</DT><DD>La taille de bloc utilis<69>e en postant des donn<6E>es query <20> l'URL. Au plus <i>size</i> octets sont <20>crits <20> la fois. Apr<70>s chaque bloc, un appel <20> <b>-queryprogress</b> callback est fait (si cette option est sp<73>cifi<66>e).
</DD>
<DT><br><b>-querychannel</b> <i>channelID</i>
</DT><DD>Ce flag fait effectuer <20> <b>::http::geturl</b> une requ<71>te POST qui passe les donn<6E>es contenues dans <i>channelID</i> au serveur. Les donn<6E>es contenue dans <i>channelID</i> doivent <20>tre une demande format<61>e x-url-encoding <20> moins que l'option <b>-type</b> soit utilis<69>e. Si un en-t<>te Content-Length n'est pas sp<73>cifi<66> via l'option<b> -headers</b>, <b>::http::geturl</b> tente de d<>terminer la taille des donn<6E>es post dans l'ordre de cr<63>ation de l'en-t<>te. Si elle est incapable de determiner la taille, elle retourne une erreur.
</DD>
<DT><br><b>-queryprogress</b> <i>callback</i>
</DT><DD>Le <i>callback</i> est faite apr<70>s chaque transfert de donn<6E>es <20> URL (ex. POST) et agit exactement comme l'option <b>-progress</b> (le format de callback est le m<>me).
</DD>
<DT><br><b>-timeout</b> <i>millisecondes</i>
</DT><DD>Si <i>millisecondes</i> est diff<66>rent de z<>ro, alors <b>::http::geturl</b> programme un timeout apr<70>s le nombre sp<73>cifi<66> de millisecondes. Un timeout provoque un appel de <b>::http::reset</b> et un callback<b> -command</b>, si sp<73>cifi<66>. La valeur de retour de <b>::http::status</b> est <b>timeout</b> apr<70>s un timeout.
</DD>
<DT><br><b>-type</b> <i>mime-type</i></DT><DD>Utilisez <i>mime-type</i> comme la valeur<b> Content-Type</b>, au lieu de de la valeur par d<>faut (<b>application/x-www-form-urlencoded</b>) pendant une op<6F>ration POST.
</DD>
<DT><br><b>-validate</b> <i>boolean</i>
</DT><DD>Si <i>boolean</i> est diff<66>rent de z<>ro, alors <b>::http::geturl</b> does un HTTP HEAD requ<71>te. Cette requ<71>te retourne la meta information concernant l'URL, mais le contenu n'est pas renvoy<6F>. La meta information est disponible dans la variable <b>state(meta)</b> apr<70>s la transaction. Voir la section TABLEAU D'ETAT pour les d<>tails.
</DD>
</DL>
</DD>
<DT><br><b>::http::formatQuery</b> <i>key value</i> ?<i>key value</i> ...?
</DT><DD>Cette fonction op<6F>re un x-url-encodage des donn<6E>es consult<6C>es. Elle attend un m<>me nombre d'arguments qui sont les cl<63>s et valeurs de la requ<71>te. Elle encode les cl<63>s et valeurs, et g<>n<EFBFBD>re une cha<68>ne avec les s<>parateurs corrects (&amp; et =). Le r<>sultat est convenable pour la valeur <b>-query </b>transmise <20> <b>::http::geturl</b>.
</DD>
<DT><b>::http::reset</b> <i>token</i>?<i>why</i>?<br>
</DT><DD>Cette commande r<>initialise la transaction HTTP identifi<66>e par <i>token</i>, si elle existe. Ceci fixe la valeur <b>state(status)</b> <20> <i>why</i>, qui est par d<>faut de <b>reset</b>, et alors appelle le callback declar<61> par <b>-command</b>.
</DD>
<DT><br><b>::http::wait</b> <i>token</i>
</DT><DD>Ceci est une fonction utilitaire qui bloque et attend que la transaction soit compl<70>t<EFBFBD>e. Elle fonctionne seulement avec du code de confiance parcequ'elle utilise <A HREF="180.htm"><b>vwait</b></A>. D'autre part, elle n'est pas utile pour les cas o<> <b>::http::geturl</b> est appel<65>e <i>sans</i> l'option <b>-command</b> parce que dans ce cas l'appel <20><b>::http::geturl</b> ne retourne pas jusqu'a ce que la transaction HTTP soit compl<70>te, et donc qu'il n'y a rien <20> attendre.
</DD>
<DT><br><b>::http::data</b> <i>token</i>
</DT><DD>Ceci est une fonction utilitaire qui retourne l'<27>l<EFBFBD>ment <b>body</b> (ex., l'URL donn<6E>e) du tableau d'<27>tat.
</DD>
<DT><br><b>::http::error</b> <i>token</i></DT><DD>Ceci est une fonction utilitaire qui retourne l'<27>l<EFBFBD>ment<A HREF="103.htm"><b> error</b></A> du tableau d'<27>tat.
</DD>
<DT><br><b>::http::status</b> <i>token</i>
</DT><DD>Ceci est une fonction utilitaire qui retourne l'<27>l<EFBFBD>ment<b> status</b> du tableau d'<27>tat.
</DD>
<DT><br><b>::http::code</b> <i>token</i>
</DT><DD>Ceci est une fonction utilitaire qui retourne l'<27>l<EFBFBD>ment<b> http</b> du tableau d'<27>tat.
</DD>
<DT><br><b>::http::ncode</b> <i>token</i></DT><DD>Ceci est une fonction utilitaire qui retourne juste le code num<75>rique de retour (200, 404, etc.) de l'<27>l<EFBFBD>ment <b>http</b> du tableau d'<27>tat.
</DD>
<DT><br><b>::http::size</b> <i>token</i>
</DT><DD>Ceci est une fonction utilitaire qui retourne l'<27>l<EFBFBD>ment <b>currentsize</b> du tableau d'<27>tat, qui repr<70>sente le nombre d'octets re<72>us de l' URL dans l'appel <20> <b>::http::geturl</b>.
</DD>
<DT><br><b>::http::cleanup</b> <i>token</i>
</DT><DD>Cette fonction nettoye l'<27>tat associ<63> <20> la connection identifi<66>e par <i>token</i> Apr<70>s cet appel, les fonctions comme <b>::http::data</b> ne peuvent pas <20>tre utilis<69>es pour obtenir l'information concernant l'op<6F>ration Il est <i>fortement</i> recommand<6E> que vous appeliez cette fonction apr<70>s avoir fini avec une requ<71>te HTTP Ne pas le faire proquera la non-lib<69>ration de la m<>moire, et si votre appli appelle <b>::http::geturl</b> plusieurs fois, la fuite m<>moire pourrait provoquer un pic de performance...ou bien pire.
</DD>
<DT><br><b>::http::register</b> <i>proto port command</i>
</DT><DD>Cette fonction permet de fournir des types de transport HTTP tel que HTTPS, en enregistrant un pr<70>fixe, le port par d<>faut, et la commande <20> ex<65>cuter pour cr<63>er le <b>channel</b> Tcl. Ex.: <br>
<br>package require http
<br>package require tls
<br>http::register https 443 ::tls::socket
<br>set token &#91;http::geturl https://my.secure.site/]
</DD>
<DT><br><b>::http::unregister</b> <i>proto</i>
</DT><DD>Cette fonction lib<69>re un gestionnaire de protocole pr<70>cedemment declar<61> via <b>http::register</b>
</DD>
</DL>
</div><br>
<div><b>ERREURS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">La fonction <b>http::geturl</b> l<>vera des erreurs dans les cas suivants: options de ligne de commande invalides, URL invalide, une URL sur une machine inexistante, ou une URL <20> un mauvais port sur une machine existante. Ces erreurs signifient que la transaction r<>seau n'a m<>me pas&nbsp; d<>marr<72>. Elle l<>ve aussi une erreur si elle recoit une erreur I/O pendant l'<27>criture de l'en-t<>te de la requ<71>te HTTP. Pour les appels<b>::http::geturl</b> synchrones (o<> <b>-command</b> n'est pas sp<73>cifi<66>e), elle l<>vera une erreur si elle recoit une erreur I /O en lisant l'en-t<>tes ou les donn<6E>es de la r<>ponse HTTP parce que <b>::http::geturl</b> ne retourne pas de jeton dans ces cas, elle fait tout le nettoyage requis et il n'y a pas de n<>cessit<69> pour votre appli d'appeler <b>::http::cleanup</b>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Pour les appels asynchrones de <b>::http::geturl</b>, toutes les situations d'erreur pr<70>c<EFBFBD>dentes s'appliquent, except<70> que si s'il y a une erreur pendant&nbsp; la lecture de l'en-t<>tes ou les donn<6E>es de la r<>ponse HTTP, aucune exception n'est l<>v<EFBFBD>e Ceci parcequ'apr<70>s l'<27>criture des en-t<>tes HTTP, <b>::http::geturl</b> retourne, et le reste de la transaction HTTP se produit en arri<72>re-plan La commande callback peut verifier si l'erreur s'est produite pendant la lecture en appelant <b>::http::status</b> pour v<>rifier le statut et si c'est <i>error</i>, appeller <b>::http::error</b> pour obtenir le message d'erreur. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Alternativement, si le flux du programme principal atteint un point ou il a besoin de connaitre le r<>sultat de la requ<71>te HTTP asynchrone, il peut appeller <b>::http::wait</b> et alors verifier les statut et erreur, comme le callback le fait. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Dans tous les cas, vous devez toujours appeller <b>http::cleanup</b> pour effacer le tableau d'<27>tat quand vous avez fini. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les autres r<>sultats possibles de la transaction HTTP d<>termin<69>s par l'examen du statut <20> partir de <b>http::status</b> sont d<>crit ci-dessous.
<DL>
<DT><br>ok
</DT><DD>Si la transaction HTTP se termine enti<74>rement, alors le statut sera <b>ok</b>. N<>anmoins, vous pouvez toujours v<>rifier la valeur <b>http::code</b> pour obtenir le statut HTTP La fonction <b>http::ncode</b> fournit just l'erreur num<75>rique (ex., 200, 404 ou 500) alors que&nbsp; la fonction <b>http::code</b> retourne une valeur comme &quot;HTTP 404 File not found&quot;.
</DD>
<DT><br>eof
</DT><DD>Si le serveur ferme la socket sans r<>ponse, alors aucune erreur n'est lev<65>e, mais le statut de la transaction sera <A HREF="102.htm"><b>eof</b></A>.
</DD>
<DT><br>error
</DT><DD>Le message d'erreur sera aussi stock<63> dans l'<27>l<EFBFBD>ment<A HREF="103.htm"><b> error</b></A> du tableau d'<27>tat, accessible via <b>::http::error</b>.
</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une autre possibilit<69> d'erreur est que <b>http::geturl</b> soit incapable d'<27>crire toutes les donn<6E>es post sur le serveur avant que le serveur r<>ponde et ferme la socket. Le message d'erreur est sauvegard<72> dans&nbsp; l'<27>l<EFBFBD>ment <b>posterror</b> du tableau d'<27>tat et alors&nbsp; <b>http::geturl</b> tente de finaliser la transaction. Si elle peut lire la r<>ponse du serveur elle finira avec un statut<b> ok</b>, autrement elle aura un statut<A HREF="102.htm"><b> eof</b></A> <br>
</div><br>
<div><b>TABLEAU D'ETAT</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">La fonction<b>::http::geturl</b> retourne un <i>token </i>qui peut <20>tre utilis<69> pour obtenir l'<27>tat de la transaction HTTP sous la forme d'un tableau Tcl. Utilisez cette construction pour cr<63>er une variable tableau facile <20> utiliser: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">upvar #0 &#36;token state</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une fois que les donn<6E>es associ<63>es <20> l'url ne sont plus n<>cessaires, le tableau d'<27>tat sera d<>truit pour lib<69>rer la m<>moire. La fonction <b>http::cleanup</b> est fournie <20> cet usage. Les <20>l<EFBFBD>ments suivants du tableau sont support<72>s:
<DL>
<DT><br><b>body</b>
</DT><DD>Le contenu de l'URL. Sera vide si l'option <b>-channel</b> a <20>t<EFBFBD> sp<73>cifi<66>e Cette valeur est renvoy<6F>ee par la commande<b>::http::data</b>.
</DD>
<DT><br><b>currentsize</b>
</DT><DD>Le nombre courant d'octets r<>cup<75>r<EFBFBD> de l'URL. Cette valeur est renvoy<6F>e par la commande<b>::http::size</b>.
</DD>
<DT><br><b>error</b>
</DT><DD>Si d<>fini, c'est la cha<68>ne d'erreur vue quand la transaction HTTP est avort<72>e.
</DD>
<DT><br><b>http</b>
</DT><DD>Le statut de la r<>ponse HTTP du serveur Cette valeur est renvoy<6F>e par la commande<b>::http::code</b> Le format de cette valeur est:
<br><i>HTTP/1.0 code string</i>
Le <i>code</i> est un nombre de trois-digit d<>fini dans le standard HTTP. Un code de 200 est OK Les codes commen<65>ant avec 4 ou 5 indiquent des erreurs. Les codes commen<65>ant avec 3 sont des erreurs de redirection Dans ce cas la meta-donn<6E>e <b>Location</b> sp<73>cifie une nouvelle URL qui contient l'information requise.
</DD>
<DT><br><b>meta</b>
</DT><DD>Le protocole HTTP retourne les meta-donn<6E>es qui d<>crivent les contenus de l'URL. L'<27>l<EFBFBD>ment <b>meta</b> du tableau d'<27>tat est une liste de cl<63>s et valeurs des meta-donn<6E>es Ceci dans un format utile pour l'initialisation d'un tableau qui contient les meta-donn<6E>es:
array set meta &#36;state(meta)
Certaines des cl<63>s meta-donn<6E>es sont list<73>es ci-dessous, mais le standard HTTP en d<>finit plus, et les serveurs sont libres d'ajouter les leurs.
<DL>
<DT><br><b>Content-Type</b>
</DT><DD>Le type de contenus de l'URL Les exemples inclutnt <b>text/html</b>, <b>image/gif,</b> <b>application/postscript</b> et <b>application/x-tcl</b>. </DD>
<DT><br><b>Content-Length</b>
</DT><DD>La taille d<>clar<61>e des contenus La taille obtenue par <b>::http::geturl</b> est disponibles comme <b>state(size)</b>.
</DD>
<DT><br><b>Location</b>
</DT><DD>Une URL alternative qui contient les donn<6E>es requises.</DD>
</DL>
</DD>
<DT><br><b>posterror</b>
</DT><DD>L'erreur, si elle existe, qui s'est produite pendant l'<27>criture du post des donn<6E>es sur le serveur.
</DD>
<DT><br><b>status</b>
</DT><DD>Soit <b>ok</b>, en cas de succ<63>s, <b>reset</b> si r<>initialis<69> par l'utilisateur, <b>timeout</b> si un timeout s'est produit avant que la transaction soit compl<70>te, ou <A HREF="103.htm"><b>error</b></A> pour une condition d'erreur Durant la transaction cette valeur est une cha<68>ne vide.
</DD>
<DT><br><b>totalsize</b>
</DT><DD>Un copie de la valeur<b> </b>des<b> </b>meta-donn<6E>es<b> Content-Length</b>.
</DD>
<DT><br><b>type</b>
</DT><DD>Une copie de la valeur<b> </b>des<b> </b>meta-donn<6E>es<b> Content-Type</b>.
</DD>
<DT><br><b>url</b>
</DT><DD>L'URL requise.
</DD>
</DL>
</div><br>
<div><b>EXEMPLE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 102px;"># Copie une URL dans un fichier et affiche les meta-donn<6E>es<br>
proc ::http::copy &#123; url file &#123;chunk 4096} } &#123;<br>
&nbsp;&nbsp;&nbsp; set out &#91;open &#36;file w]<br>
set token &#91;geturl &#36;url -canal &#36;out -progress ::http::Progress &#92;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-blocksize &#36;chunk]<br>
&nbsp;&nbsp;&nbsp; close &#36;out<br>
&nbsp;&nbsp;&nbsp; # Ceci finit la ligne lanc<6E> par http::Progress<br>
&nbsp;&nbsp;&nbsp; puts stderr &quot;&quot;<br>
&nbsp;&nbsp;&nbsp; upvar #0 &#36;token state<br>
set max 0<br>
&nbsp;&nbsp;&nbsp; foreach &#123;name value} &#36;state (meta) &#123;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#123;&#91;string longueur &#36;name] &gt; &#36;max} &#123;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set max &#91;string longueur &#36;name]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#123;&#91;regexp -nocase ^location&#36; &#36;name]} &#123;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # G<>re la redirection d'URL <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts stderr &quot;Location:&#36;value &quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return &#91;copy &#91;string trim &#36;value] &#36;file &#36;chunk]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; incr max<br>
&nbsp;&nbsp;&nbsp; foreach &#123;name value } &#36; state (meta) &#123;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts &#91;format &quot;%-*s %s&quot; &#36;max &#36;name: &#36;value]<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
return &#36;token<br>
}<br>
proc ::http::Progress &#123;args} &#123;<br>
&nbsp;&nbsp;&nbsp; puts -nunwline stderr . ; flush stderr<br>
}<br>
</div><br>
<div><b>VOIR EGALEMENT</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">safe(n), <A HREF="162.htm">socket</A>(n), safesock(n) </div><br>
<div>Derni<EFBFBD>re r<>vision: 8.3</div>
<br>
<br><div ALIGN="CENTER"><A HREF="index.htm"><b>Index</b></A>&nbsp;&nbsp;<A HREF="121.htm"><b>Pr<EFBFBD>c<EFBFBD>dent</b></A>&nbsp;&nbsp;<A HREF="123.htm"><b>Suivant</b></A></div>
</BODY></HTML>