451 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			451 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | ||
| <html>
 | ||
|   <head>
 | ||
|     <title>Http</title>
 | ||
|   </head>
 | ||
| 
 | ||
|   <body>
 | ||
|     <h1>Http</h1>
 | ||
| 
 | ||
|     <p>ëÌÉÅÎÔÓËÁÑ ÞÁÓÔØ ÒÅÁÌÉÚÁÃÉÉ ÐÒÏÔÏËÏÌÁ HTTP/1.0.</p>
 | ||
| 
 | ||
|     <h2><a name="óéîôáëóéó"></a>óéîôáëóéó</h2>
 | ||
| 
 | ||
|     <pre>
 | ||
|       <strong>package</strong> <strong>require</strong> <em>http</em> ?<em>2.0</em>?
 | ||
|       <a href="#http::config"><strong>::http::config</strong></a> ?<em>options</em>?
 | ||
|       <a href="#http::geturl_url"><strong>::http::geturl</strong> <strong>url</strong></a> ?<em>options</em>?
 | ||
|       <a href="#http::formatQuery"><strong>::http::formatQuery</strong></a> <em>list</em>
 | ||
|       <a href="#http::reset"><strong>::http::reset</strong></a> <em>token</em> ?<em>why</em>?
 | ||
|       <a href="#http::wait"><strong>::http::wait</strong></a> <em>token</em>
 | ||
|       <a href="#http::status"><strong>::http::status</strong></a> <em>token</em>
 | ||
|       <a href="#http::size"><strong>::http::size</strong></a> <em>token</em>
 | ||
|       <a href="#http::code"><strong>::http::code</strong></a> <em>token</em>
 | ||
|       <a href="#http::data"><strong>::http::data</strong></a> <em>token</em>
 | ||
|     </pre>
 | ||
| 
 | ||
|     <h2><a name="ïðéóáîéå"></a>ïðéóáîéå</h2>
 | ||
| 
 | ||
|     <p>ðÁËÅÔ <strong>http</strong> ÏÂÅÓÐÅÞÉ×ÁÅÔ ËÌÉÅÎÔÓËÕÀ ÞÁÓÔØ ÐÒÏÔÏËÏÌÁ
 | ||
|       HTTP/1.0 É ÒÅÁÌÉÚÕÅÔ ÏÐÅÒÁÃÉÉ GET, POST É HEAD. ïÎ ÐÏÚ×ÏÌÑÅÔ
 | ||
|       ËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÓÅÒ×ÅÒ-ÐÒÅÄÓÔÁ×ÉÔÅÌØ (proxy) ÄÌÑ ×ÙÈÏÄÁ ÞÅÒÅÚ
 | ||
|       ÍÅÖÓÅÔÅ×ÙÅ ÜËÒÁÎÙ. ðÁËÅÔ ÓÏ×ÍÅÓÔÉÍ Ó ÐÏÌÉÔÉËÏÊ ÂÅÚÏÐÁÓÎÏÓÔÉ
 | ||
|       Safesock.</p>
 | ||
| 
 | ||
|     <p>ðÒÏÃÅÄÕÒÁ <a href="#http::geturl_url"><strong>::http::geturl</strong></a>
 | ||
|       ×ÙÐÏÌÎÑÅÔ HTTP ÔÒÁÎÚÁËÃÉÀ. ÷ ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÚÁÄÁÎÎÏÊ ÏÐÃÉÉ ÜÔÏ
 | ||
|       ÍÏÖÅÔ ÂÙÔØ GET, POST ÉÌÉ HEAD ÔÒÁÎÚÁËÃÉÑ.  ÷ÅÌÉÞÉÎÁ,
 | ||
|       ×ÏÚ×ÒÁÝÁÅÍÁÑ ÐÒÏÃÅÄÕÒÏÊ <a href="#http::geturl_url">
 | ||
|       <strong>::http::geturl</strong></a>, Ñ×ÌÑÅÔÓÑ ÐÒÉÚÎÁËÏÍ (token) ×ÙÐÏÌÎÅÎÉÑ
 | ||
|       ÔÒÁÎÚÁËÃÉÉ. ëÒÏÍÅ ÔÏÇÏ, ÅÅ ÚÎÁÞÅÎÉÅ ÓÏ×ÐÁÄÁÅÔ Ó ÉÍÅÎÅÍ ÍÁÓÓÉ×Á ×
 | ||
|       ÐÒÏÓÔÒÁÎÓÔ×Å ÉÍÅÎ <strong>::http</strong>, ËÏÔÏÒÙÊ ÓÏÄÅÒÖÉÔ ÉÎÆÏÒÍÁÃÉÀ Ï
 | ||
|       ×ÙÐÏÌÎÅÎÉÉ ÔÒÁÎÚÁËÃÉÉ. üÌÅÍÅÎÔÙ ÍÁÓÓÉ×Á ÏÐÉÓÁÎÙ ÎÉÖÅ, ÓÍ. "<a
 | ||
|       href="#íáóóé÷_óïóôïñîéñ_ôòáîúáëãéé">íÁÓÓÉ×
 | ||
|       ÓÏÓÔÏÑÎÉÑ ÔÒÁÎÚÁËÃÉÉ</a>".</p>
 | ||
| 
 | ||
|     <p>åÓÌÉ ÐÒÏÃÅÄÕÒÁ ×ÙÚ×ÁÎÁ Ó ÏÐÃÉÅÊ <strong>-command</strong>, ÏÐÅÒÁÃÉÑ
 | ||
|       ×ÙÐÏÌÎÑÅÔÓÑ × ÆÏÎÏ×ÏÍ ÒÅÖÉÍÅ. ðÒÏÃÅÄÕÒÁ <a href=
 | ||
|       "#http::geturl_url"><strong>::http::geturl</strong></a>
 | ||
|       ÚÁ×ÅÒÛÁÅÔÓÑ ÓÒÁÚÕ ÐÏÓÌÅ ÆÏÒÍÉÒÏ×ÁÎÉÑ HTTP ÚÁÐÒÏÓÁ, Á ÒÅÚÕÌØÔÁÔÙ
 | ||
|       ÚÁÐÒÏÓÁ ÏÂÒÁÂÁÔÙ×ÁÀÔÓÑ ÐÏÓÌÅ ÉÈ ÐÏÌÕÞÅÎÉÑ. äÌÑ ÕÓÐÅÛÎÏÊ ÒÁÂÏÔÙ ×
 | ||
|       ÔÁËÏÍ ÒÅÖÉÍÅ ÎÅÏÂÈÏÄÉÍÏ, ÞÔÏÂÙ ÂÙÌ ÚÁÐÕÝÅÎ ÏÂÒÁÂÏÔÞÉË
 | ||
|       ÓÏÂÙÔÉÊ. üÔÏ ×ÓÅÇÄÁ ÔÁË ÄÌÑ Tk-ÐÒÉÌÏÖÅÎÉÊ. ÷ ÞÉÓÔÏ Tcl -
 | ||
|       ÐÒÉÌÏÖÅÎÉÑÈ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÏÃÅÄÕÒÕ <a
 | ||
| 	href="#http::wait"><strong>::http::wait</strong></a> ÄÌÑ ÚÁÐÕÓËÁ
 | ||
|       ÏÂÒÁÂÏÔÞÉËÁ ÓÏÂÙÔÉÊ.</p>
 | ||
| 
 | ||
|     <h2><a name="ëïíáîäù"></a>ëïíáîäù</h2>
 | ||
| 
 | ||
|     <dl>
 | ||
|       <dt><a name="http::config"></a><strong>::http::config</strong>
 | ||
| 	?<em>options?</em></dt>
 | ||
| 
 | ||
|       <dd><p>ëÏÍÁÎÄÁ <strong>::http::config</strong> ÉÓÐÏÌØÚÕÅÔÓÑ, ÞÔÏÂÙ
 | ||
| 	  ÕÓÔÁÎÏ×ÉÔØ ÉÌÉ ÚÁÐÒÏÓÉÔØ ÉÍÑ proxy-ÓÅÒ×ÅÒÁ, ÐÏÒÔÁ É
 | ||
| 	  ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÇÏ ÐÒÉÌÏÖÅÎÉÑ (User-Agent), ÉÓÐÏÌØÚÕÅÍÙÅ ×
 | ||
| 	  HTTP ÚÁÐÒÏÓÁÈ. åÓÌÉ ÎÉËÁËÉÅ ÏÐÃÉÉ ÎÅ ÚÁÄÁÎÙ, ×ÏÚ×ÒÁÝÁÅÔÓÑ
 | ||
| 	  ÔÅËÕÝÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ.  åÓÌÉ ÚÁÄÁÎ ÅÄÉÎÓÔ×ÅÎÎÙÊ ÁÒÇÕÍÅÎÔ,
 | ||
| 	  ÔÏÇÄÁ, ÏÎ ÄÏÌÖÅÎ ÂÙÔØ ÉÍÅÎÅÍ ÏÄÎÏÊ ÉÚ ÏÐÃÉÊ, ÏÐÉÓÁÎÎÙÈ
 | ||
| 	  ÎÉÖÅ. ÷ ÜÔÏÍ ÓÌÕÞÁÅ ×ÏÚ×ÒÁÝÁÅÔÓÑ ÔÅËÕÝÁÑ ×ÅÌÉÞÉÎÁ ÕËÁÚÁÎÎÏÊ
 | ||
| 	  ÏÐÃÉÉ. ÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ÁÒÇÕÍÅÎÔÙ ÓÏÓÔÏÑÔ ÉÚ ÐÁÒ: ÉÍÑ
 | ||
| 	  ÏÐÃÉÉ - ÐÒÉÓ×ÁÉ×ÁÅÍÏÅ ÚÎÁÞÅÎÉÅ.</p>
 | ||
| 
 | ||
| 	<dl>
 | ||
| 	  <dt><strong>-accept</strong> <em>mimetypes</em></dt>
 | ||
| 
 | ||
| 	  <dd>ïÐÒÅÄÅÌÑÅÔ ÔÉÐÙ ÄÏËÕÍÅÎÔÏ×, ËÏÔÏÒÙÅ ÍÏÇÕÔ ÂÙÔØ ÐÒÉÎÑÔÙ
 | ||
| 	    ÐÏ ÚÁÐÒÏÓÕ. úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ "*/*" ÏÚÎÁÞÁÅÔ, ÞÔÏ
 | ||
| 	    ÍÏÇÕÔ ÂÙÔØ ÐÒÉÎÑÔÙ ÄÏËÕÍÅÎÔÙ ÌÀÂÏÇÏ ÔÉÐÁ. þÔÏÂÙ ÏÇÒÁÎÉÞÉÔØ
 | ||
| 	    ÓÐÉÓÏË ÄÏÐÕÓÔÉÍÙÈ ÄÏËÕÍÅÎÔÏ×, ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÐÉÓÏË
 | ||
| 	    (ÞÅÒÅÚ ÚÁÐÑÔÕÀ) ÛÁÂÌÏÎÏ× ÄÏËÕÍÅÎÔÏ× ÓÌÅÄÕÀÝÅÇÏ ×ÉÄÁ:
 | ||
| 	    "image/gif, image/jpeg, text/*".</dd>
 | ||
| 
 | ||
| 	  <dt><strong>-proxyhost</strong> <em>hostname</em></dt>
 | ||
| 
 | ||
| 	  <dd>éÍÑ proxy-ÓÅÒ×ÅÒÁ, ÞÅÒÅÚ ËÏÔÏÒÙÊ ÏÓÕÝÅÓÔ×ÌÑÅÔÓÑ Ó×ÑÚØ.
 | ||
| 	    åÓÌÉ ÎÅ ÕËÁÚÁÎÏ, Ó×ÑÚØ ÏÓÕÝÅÓÔ×ÌÑÅÔÓÑ ÎÁÐÒÑÍÕÀ.</dd>
 | ||
| 
 | ||
| 	  <dt><strong>-proxyport</strong> <em>number</em></dt>
 | ||
| 
 | ||
| 	  <dd>éÍÑ proxy-ÐÏÒÔÁ.</dd>
 | ||
| 
 | ||
| 	  <dt><strong>-proxyfilter</strong> <em>command</em></dt>
 | ||
| 
 | ||
| 	  <dd>ïÐÒÅÄÅÌÑÅÔ ËÏÍÁÎÄÕ, ËÏÔÏÒÁÑ ×ÏÚ×ÒÁÝÁÅÔ ÉÍÅÎÁ
 | ||
| 	    proxy-ÓÅÒ×ÅÒÁ É proxy-ÐÏÒÔÁ, ÎÅÏÂÈÏÄÉÍÙÅ ÄÌÑ ÄÁÎÎÏÊ
 | ||
| 	    Ó×ÑÚÉ. ÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ×ÏÚ×ÒÁÝÁÅÔ ÐÕÓÔÏÅ ÚÎÁÞÅÎÉÅ. ÷
 | ||
| 	    ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ ÐÒÉ ×ÙÚÏ×Å ËÏÍÁÎÄÙ ÉÓÐÏÌØÚÕÅÔÓÑ ÉÍÑ
 | ||
| 	    ÓÅÒ×ÅÒÁ (host).  åÓÌÉ ËÏÍÁÎÄÁ ÎÅ ÚÁÄÁÎÁ, ÉÓÐÏÌØÚÕÀÔÓÑ
 | ||
| 	    ÚÎÁÞÅÎÉÑ ÏÐÃÉÊ <strong>-proxyhost</strong> É
 | ||
| 	    <strong>-proxyport</strong>.</dd>
 | ||
| 
 | ||
| 	  <dt><strong>-useragent</strong> <em>string</em></dt>
 | ||
| 
 | ||
| 	  <dd>ïÐÒÅÄÅÌÑÅÔ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÇÏ ÐÒÉÌÏÖÅÎÉÑ
 | ||
| 	    (User-Agent).  úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ "Tcl http client
 | ||
| 	    package 2.0."</dd>
 | ||
| 	</dl>
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::geturl_url"></a><strong>::http::geturl url</strong>
 | ||
| 	?<em>options</em>?</dt>
 | ||
|     
 | ||
|       <dd><p>ëÏÍÁÎÄÁ <strong>::http::geturl</strong> - ÏÓÎÏ×ÎÁÑ ËÏÍÁÎÄÁ ÐÁËÅÔÁ.
 | ||
| 	  åÓÌÉ ÚÁÄÁÎÁ ÏÐÃÉÑ <strong>-query</strong>, ×ÙÐÏÌÎÑÅÔÓÑ ÏÐÅÒÁÃÉÑ POST,
 | ||
| 	  ÅÓÌÉ ÚÁÄÁÎÁ ÏÐÃÉÑ <strong>-validate</strong>, ×ÙÐÏÌÎÑÅÔÓÑ ÏÐÅÒÁÃÉÑ
 | ||
| 	  HEAD.  ÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ×ÙÐÏÌÎÑÅÔÓÑ ÏÐÅÒÁÃÉÑ GET. ëÏÍÁÎÄÁ
 | ||
| 	  ×ÏÚ×ÒÁÝÁÅÔ ÐÒÉÚÎÁË - ÉÍÑ ÍÁÓÓÉ×Á, ËÏÔÏÒÙÊ ÍÏÖÅÔ ÂÙÔØ
 | ||
| 	  ÉÓÐÏÌØÚÏ×ÁÎ ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ Ï
 | ||
| 	  ÓÏÓÔÏÑÎÉÉ ÔÒÁÎÚÁËÃÉÉ.  ðÏÄÒÏÂÎÏÓÔÉ ÓÍ. <a
 | ||
| 	  href="#íáóóé÷_óïóôïñîéñ_ôòáîúáëãéé">"íÁÓÓÉ×
 | ||
| 	  ÓÏÓÔÏÑÎÉÑ ÔÒÁÎÚÁËÃÉÉ"</a>. ëÏÍÁÎÄÁ ÚÁ×ÅÒÛÁÅÔÓÑ ÐÏÓÌÅ
 | ||
| 	  ÚÁ×ÅÒÛÅÎÉÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ÏÐÅÒÁÃÉÉ, ÅÓÌÉ ÏÎÁ ×ÙÚ×ÁÎÁ ÂÅÚ
 | ||
| 	  ÏÐÃÉÉ <strong>-command</strong>. ÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ËÏÍÁÎÄÁ
 | ||
| 	  <strong>::http::geturl</strong> ÚÁ×ÅÒÛÁÅÔÓÑ ÎÅÍÅÄÌÅÎÎÏ, Á ÐÏ
 | ||
| 	  ÚÁ×ÅÒÛÅÎÉÉ ÏÐÅÒÁÃÉÉ ×ÙÚÙ×ÁÅÔÓÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÁÑ ËÏÍÁÎÄÁ ÄÌÑ
 | ||
| 	  ÏÂÒÁÂÏÔËÉ ÅÅ ÒÅÚÕÌØÔÁÔÏ×. ëÏÍÁÎÄÁ <strong>::http::geturl</strong>
 | ||
| 	  ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó ÒÁÚÌÉÞÎÙÍÉ ÏÐÃÉÑÍÉ:</p>
 | ||
| 
 | ||
| 	<dl>
 | ||
| 	  <dt><strong>-blocksize</strong> <em>size</em></dt>
 | ||
| 
 | ||
| 	  <dd>éÓÐÏÌØÚÕÅÔÓÑ ÐÒÉ ÞÔÅÎÉÉ ÉÎÆÏÒÍÁÃÉÉ. ïÐÒÅÄÅÌÑÅÔ
 | ||
| 	    ÍÁËÓÉÍÁÌØÎÙÊ ÒÁÚÍÅÒ ÂÌÏËÁ (× ÂÁÊÔÁÈ), ËÏÔÏÒÙÊ ÍÏÖÅÔ ÂÙÔØ
 | ||
| 	    ÐÒÏÞÉÔÁÎ ÚÁ ÏÄÉÎ ÒÁÚ. ðÏÓÌÅ ËÁÖÄÏÇÏ ÞÔÅÎÉÑ ÂÌÏËÁ
 | ||
| 	    ×ÙÚÙ×ÁÅÔÓÑ ËÏÍÁÎÄÁ, ÏÐÒÅÄÅÌÅÎÎÁÑ Ó ÐÏÍÏÝØÀ ÏÐÃÉÉ
 | ||
| 	    <strong>-progress</strong>.
 | ||
| 	  </dd>
 | ||
| 
 | ||
| 	  <dt><strong>-channel</strong> <em>name</em></dt>
 | ||
| 
 | ||
| 	  <dd>ðÅÒÅÎÁÐÒÁ×ÌÑÅÔ ÐÏÌÕÞÅÎÎÕÀ ÉÎÆÏÒÍÁÃÉÑ × ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÊ
 | ||
| 	    ËÁÎÁÌ ×ÍÅÓÔÏ ÔÏÇÏ, ÞÔÏÂÙ ÓÏÈÒÁÎÑÔØ ÅÅ × ÐÅÒÅÍÅÎÎÏÊ
 | ||
| 	    <em>state(body)</em>.
 | ||
| 	  </dd>
 | ||
|       
 | ||
| 	  <dt><strong>-command</strong> <em>callback</em></dt>
 | ||
| 
 | ||
| 	  <dd><p>ïÂÅÓÐÅÞÉ×ÁÅÔ ×ÙÚÏ× ËÏÍÁÎÄÙ <em>callback</em> ÐÏÓÌÅ
 | ||
| 	      ÚÁ×ÅÒÛÅÎÉÑ ÔÒÁÎÚÁËÃÉÉ. ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÜÔÏÊ ÏÐÃÉÉ
 | ||
| 	      ËÏÍÁÎÄÁ <strong>::http::geturl</strong> ÚÁ×ÅÒÛÁÅÔÓÑ ÓÒÁÚÕ. ëÏÍÁÎÄÁ
 | ||
| 	      <em>callback</em> ×ÙÚÙ×ÁÅÔÓÑ Ó ÁÒÇÕÍÅÎÔÏÍ <em>token</em>,
 | ||
| 	      ËÏÔÏÒÙÊ ÓÏÄÅÒÖÉÔ ÉÍÑ ÍÁÓÓÉ×Á, ÏÐÉÓÁÎÎÏÇÏ ÎÉÖÅ, ÓÍ. <a
 | ||
| 	      href="#íáóóé÷_óïóôïñîéñ_ôòáîúáëãéé">"íÁÓÓÉ×
 | ||
| 	      ÓÏÓÔÏÑÎÉÑ ÔÒÁÎÚÁËÃÉÉ"</a>. îÉÖÅ ÐÒÉ×ÅÄÅÎ ÛÁÂÌÏÎ
 | ||
| 	      ÔÉÐÏ×ÏÊ ÐÒÏÃÅÄÕÒÙ ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × ÄÁÎÎÏÊ ÏÐÃÉÉ:</p>
 | ||
| 	    <pre>
 | ||
|     proc httpCallback {token} { 
 | ||
|                   upvar #0 $token state 
 | ||
|                   # äÁÌÅÅ ×ÏÚÍÏÖÎÁ ÒÁÂÏÔÁ ÓÏ state ËÁË Ó ÏÂÙÞÎÙÍ Tcl-ÍÁÓÓÉ×ÏÍ
 | ||
| 	      }
 | ||
| 	    </pre>
 | ||
| 	  </dd>
 | ||
| 
 | ||
| 	  <dt><strong>-handler</strong> <em>callback</em></dt>
 | ||
| 
 | ||
| 	  <dd><p>ïÐÃÉÑ ÏÂÅÓÐÅÞÉ×ÁÅÔ ×ÙÚÏ× ËÏÍÁÎÄÙ <em>callback</em> ËÁË
 | ||
| 	      ÔÏÌØËÏ HTTP ÄÁÎÎÙÅ ÐÏÌÕÞÅÎÙ. ëÏÍÁÎÄÁ ÐÏÌÕÞÁÅÔ Ä×Á
 | ||
| 	      ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÁÒÇÕÍÅÎÔÁ: HTTP <em>socket</em> É ÉÍÑ
 | ||
| 	      ÍÁÓÓÉ×Á <em>token</em>, ×ÏÚ×ÒÁÝÅÎÎÏÅ ËÏÍÁÎÄÏÊ
 | ||
| 	      <strong>::http::geturl</strong> (ÓÍ. <a href=
 | ||
| 		"#íáóóé÷_óïóôïñîéñ_ôòáîúáëãéé">"íÁÓÓÉ× ÓÏÓÔÏÑÎÉÑ
 | ||
| 	      ÔÒÁÎÚÁËÃÉÉ"</a>). ëÏÍÁÎÄÁ ÄÏÌÖÎÁ ×ÏÚ×ÒÁÝÁÔØ ÞÉÓÌÏ
 | ||
| 	      ÂÁÊÔÏ×, ÐÒÏÞÉÔÁÎÎÙÈ ÉÚ <em>socket</em>. îÉÖÅ ÐÒÉ×ÅÄÅÎ
 | ||
| 	      ÛÁÂÌÏÎ ÐÏÄÏÂÎÏÊ ÐÒÏÃÅÄÕÒÙ:</p>
 | ||
| <pre>
 | ||
|      proc httpHandlerCallback {socket token} {
 | ||
|                    upvar #0 $token state
 | ||
|                    # ðÏÌÕÞÅÎ ÄÏÓÔÕÐ Ë socket É Tcl-ÍÁÓÓÉ×Õ state 
 | ||
|                    # ... 
 | ||
|                    # (ÎÁÐÒÉÍÅÒ: 
 | ||
|                    # set data [read $socket 1000];
 | ||
|                    # set nbytes [string length $data])
 | ||
|                    # ...
 | ||
|                    return nbytes
 | ||
|                }
 | ||
| </pre>
 | ||
| 	  </dd>
 | ||
| 
 | ||
| 	  <dt><strong>-headers</strong> <em>keyvaluelist</em></dt>
 | ||
| 
 | ||
| 	  <dd><p>ïÐÃÉÑ ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ ×ËÌÀÞÅÎÉÑ × ÚÁÇÏÌÏ×ÏË HTTP
 | ||
| 	      ÚÁÐÒÏÓÁ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÐÏÌÅÊ. áÒÇÕÍÅÎÔ ÄÏÌÖÅÎ ÂÙÔØ
 | ||
| 	      ÐÒÁ×ÉÌØÎÙÍ ÓÐÉÓËÏÍ Ó ÞÅÔÎÙÍ ÞÉÓÌÏÍ ÜÌÅÍÅÎÔÏ×, ÓÏÓÔÏÑÝÉÍ
 | ||
| 	      ÐÏÐÅÒÅÍÅÎÎÏ ÉÚ ËÌÀÞÅÊ É ÉÈ ÚÎÁÞÅÎÉÊ. ëÌÀÞÉ ÉÓÐÏÌØÚÕÀÔÓÑ
 | ||
| 	      ËÁË ÉÍÅÎÁ ÐÏÌÅÊ ÚÁÇÏÌÏ×ËÁ. éÚ ÚÎÁÞÅÎÉÊ ÕÄÁÌÑÀÔÓÑ ÓÉÍ×ÏÌÙ
 | ||
| 	      ÐÅÒÅÈÏÄÁ ÎÁ ÎÏ×ÕÀ ÓÔÒÏËÕ, ÞÔÏÂÙ ÉÚÂÅÖÁÔØ ÆÏÒÍÉÒÏ×ÁÎÉÑ
 | ||
| 	      ÎÅÐÒÁ×ÉÌØÎÏÇÏ ÚÁÇÏÌÏ×ËÁ. îÁÐÒÉÍÅÒ, ÅÓÌÉ
 | ||
| 	      <em>keyvaluelist</em> ÓÏÄÅÒÖÉÔ ÓÐÉÓÏË <em>{Pragma
 | ||
| 	      no-cache}</em> ÂÕÄÅÔ ÓÆÏÒÍÉÒÏ×ÁÎ ÓÌÅÄÕÀÝÉÊ ÚÁÇÏÌÏ×ÏË
 | ||
| 	      ÚÁÐÒÏÓÁ:</p>
 | ||
| 	    <pre>
 | ||
| 	      Pragma: no-cache
 | ||
| 	    </pre>
 | ||
| 	  </dd>
 | ||
| 
 | ||
| 	  <dt><strong>-progress</strong> <em>callback</em></dt>
 | ||
| 
 | ||
| 	  <dd><p>ïÐÃÉÑ ÏÂÅÓÐÅÞÉ×ÁÅÔ ×ÙÚÏ× ËÏÍÁÎÄÙ <em>callback</em> ÄÌÑ
 | ||
| 	      ÏÂÒÁÂÏÔËÉ ÏÞÅÒÅÄÎÏÊ ÐÏÒÃÉÉ ÄÁÎÎÙÈ. ëÏÍÁÎÄÁ
 | ||
| 	      <em>callback</em> ÐÏÌÕÞÁÅÔ ÔÒÉ ÁÒÇÕÍÅÎÔÁ: ÚÎÁÞÅÎÉÅ
 | ||
| 	      <em>token</em>, ×ÏÚ×ÒÁÝÅÎÎÏÅ ËÏÍÁÎÄÏÊ
 | ||
| 	      <strong>::http::geturl</strong>, ÐÒÅÄÐÏÌÁÇÁÅÍÙÊ ÐÏÌÎÙÊ ÒÁÚÍÅÒ
 | ||
| 	      ÄÁÎÎÙÈ ÉÚ ÍÅÔÁ-ÄÁÎÎÙÈ É ÔÅËÕÝÅÅ ËÏÌÉÞÅÓÔ×Ï ÐÏÓÔÕÐÉ×ÛÉÈ
 | ||
| 	      ÄÁÎÎÙÈ × ÂÁÊÔÁÈ. åÓÌÉ ÐÒÅÄÐÏÌÁÇÁÅÍÙÊ ÐÏÌÎÙÊ ÒÁÚÍÅÒ
 | ||
| 	      ÎÅÉÚ×ÅÓÔÅÎ, ×ÍÅÓÔÏ ÎÅÇÏ ÐÏÄÓÔÁ×ÌÑÅÔÓÑ 0. îÉÖÅ ÐÒÉ×ÅÄÅÎ
 | ||
| 	      ÛÁÂÌÏÎ ÄÌÑ ÐÒÏÃÅÄÕÒÙ, ×ÙÚÙ×ÁÅÍÏÊ ÐÏ ÏÐÃÉÉ
 | ||
| 	      <strong>-progress</strong>:</p>
 | ||
| 
 | ||
| 	    <pre>
 | ||
|     proc httpProgress {token total current} { 
 | ||
|                   upvar #0 $token state 
 | ||
| 	      }
 | ||
| 	    </pre>
 | ||
| 	  </dd>
 | ||
| 
 | ||
| 	  <dt><strong>-query</strong> <em>query</em></dt>
 | ||
| 
 | ||
| 	  <dd>åÓÌÉ ÕËÁÚÁÎÁ ÄÁÎÎÁÑ ÏÐÃÉÑ, <strong>::http::geturl</strong>
 | ||
| 	    ÆÏÒÍÉÒÕÅÔ ÚÁÐÒÏÓ POST É ÐÅÒÅÄÁÅÔ ÅÇÏ ÎÁ ÓÅÒ×ÅÒ. úÁÐÒÏÓ
 | ||
| 	    ÄÏÌÖÅÎ ÂÙÔØ ÓÆÏÒÍÁÔÉÒÏ×ÁÎ. äÌÑ ×ÙÐÏÌÎÅÎÉÑ ÆÏÒÍÁÔÉÒÏ×ÁÎÉÑ
 | ||
| 	    ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÐÒÏÃÅÄÕÒÁ <a href=
 | ||
| 	    "#http::formatQuery"><strong>::http::formatQuery</strong></a>.
 | ||
| 	  </dd>
 | ||
| 
 | ||
| 	  <dt><strong>-timeout</strong> <em>milliseconds</em></dt>
 | ||
| 
 | ||
| 	  <dd>åÓÌÉ ÚÎÁÞÅÎÉÅ <em>milliseconds</em> ÎÅ ÒÁ×ÎÏ ÎÕÌÀ,
 | ||
| 	    ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ ×ÒÅÍÑ ÚÁÄÅÒÖËÉ. úÁÄÅÒÖËÁ
 | ||
| 	    ×ÙÐÏÌÎÑÅÔÓÑ ÐÅÒÅÄ ×ÙÚÏ×ÏÍ ËÏÍÁÎÄÙ <a href=
 | ||
| 	    "#http::reset"><strong>::http::reset</strong></a> É ËÏÍÁÎÄÙ,
 | ||
| 	    ÚÁÄÁÎÎÏÊ ÏÐÃÉÅÊ <strong>-command</strong>. ÷Ï ×ÒÅÍÑ ÚÁÄÅÒÖËÉ ËÏÍÁÎÄÁ
 | ||
| 	    <a href="#http::status"><strong>::http::status</strong></a>
 | ||
| 	    ×ÏÚ×ÒÁÝÁÅÔ ÚÎÁÞÅÎÉÅ <em>timeout</em>.
 | ||
| 	  </dd>
 | ||
| 
 | ||
| 	  <dt><strong>-validate</strong> <em>boolean</em></dt>
 | ||
| 
 | ||
| 	  <dd>åÓÌÉ ÚÎÁÞÅÎÉÅ boolean ÎÅ ÒÁ×ÎÏ ÎÕÌÀ,
 | ||
| 	    <strong>::http::geturl</strong> ×ÙÐÏÌÎÑÅÔ HTTP HEAD ÚÁÐÒÏÓ. ôÁËÏÊ
 | ||
| 	    ÚÁÐÒÏÓ ×ÏÚ×ÒÁÝÁÅÔ ÍÅÔÁ ÉÎÆÏÒÍÁÃÉÀ Ï ÉÓÔÏÞÎÉËÅ ÄÁÎÎÙÈ
 | ||
| 	    (URL), Á ÎÅ ÅÇÏ ÓÏÄÅÒÖÁÎÉÅ. íÅÔÁ ÉÎÆÏÒÍÁÃÉÑ ÓÏÄÅÒÖÉÔÓÑ ×
 | ||
| 	    ÐÅÒÅÍÅÎÎÏÊ <em>state(meta)</em> (ÓÍ. "<a
 | ||
| 	    href="#íáóóé÷_óïóôïñîéñ_ôòáîúáëãéé">íÁÓÓÉ×
 | ||
| 	    ÓÏÓÔÏÑÎÉÑ ÔÒÁÎÚÁËÃÉÉ</a>").
 | ||
| 	  </dd>
 | ||
| 	</dl>
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::formatQuery"></a><strong>::http::formatQuery</strong>
 | ||
| 	<em>key</em> <em>value</em> ?<em>key</em> <em>value</em>...?</dt>
 | ||
| 
 | ||
|       <dd>ëÏÍÁÎÄÁ ×ÙÐÏÌÎÑÅÔ ÐÅÒÅËÏÄÉÒÏ×ÁÎÉÅ ÚÁÐÒÏÓÁ. ëÏÍÁÎÄÁ
 | ||
| 	ÉÓÐÏÌØÚÕÅÔ ÞÅÔÎÏÅ ÞÉÓÌÏ ÁÒÇÕÍÅÎÔÏ×, Ñ×ÌÑÀÝÉÈÓÑ ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ
 | ||
| 	ËÌÀÞÁÍÉ ÚÁÐÒÏÓÁ É ÉÈ ÚÎÁÞÅÎÉÑÍÉ. ïÎÁ ÐÒÅÏÂÒÁÚÕÅÔ ËÌÀÞÉ É
 | ||
| 	ÚÎÁÞÅÎÉÑ É ×ÏÚ×ÒÁÝÁÅÔ ÏÄÎÕ ÓÔÒÏËÕ, × ËÏÔÏÒÏÊ ÒÁÓÓÔÁ×ÌÅÎÙ
 | ||
| 	ÎÅÏÂÈÏÄÉÍÙÅ "&" É "="
 | ||
| 	ÒÁÚÄÅÌÉÔÅÌÉ. òÅÚÕÌØÔÁÔ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ × ËÁÞÅÓÔ×Å ÚÎÁÞÅÎÉÑ
 | ||
|   ÄÌÑ ÏÐÃÉÉ <strong>-query</strong> ËÏÍÁÎÄÙ <a href="#http::geturl_url">
 | ||
|     <strong>::http::geturl</strong></a>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::reset"></a><strong>::http::reset</strong> <em>token</em>
 | ||
| 	?<em>why</em>?</dt>
 | ||
| 
 | ||
|       <dd>ëÏÍÁÎÄÁ ÐÅÒÅÚÁÐÕÓËÁÅÔ HTTP ÔÒÁÎÚÁËÃÉÀ <em>token</em>, ÅÓÌÉ
 | ||
| 	ÔÁËÁÑ ÉÓÐÏÌÎÑÅÔÓÑ. úÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ <strong>state(status)</strong>
 | ||
| 	ÐÒÉ ÜÔÏÍ ÐÅÒÅÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ × <em>why</em> (ÐÏ ÕÍÏÌÞÁÎÉÀ -
 | ||
| 	<strong>reset</strong>) É ×ÙÚÙ×ÁÅÔÓÑ ËÏÍÁÎÄÁ, ÚÁÄÁÎÎÁÑ ÏÐÃÉÅÊ
 | ||
| 	<strong>-command</strong>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::wait"></a><strong>::http::wait</strong>
 | ||
| 	<em>token</em></dt>
 | ||
|     
 | ||
|       <dd>üÔÁ ËÏÍÁÎÄÁ ÏÂÅÓÐÅÞÉ×ÁÅÔ ÏÖÉÄÁÎÉÅ ÚÁ×ÅÒÛÅÎÉÑ ÔÒÁÎÚÁËÃÉÉ. ïÎÁ
 | ||
| 	ÒÁÂÏÔÁÅÔ ÔÏÌØËÏ × ÎÁÄÅÖÎÙÈ ÉÎÔÅÒÐÒÅÔÁÔÏÒÁÈ, ÔÁË ËÁË ÏÎÁ
 | ||
| 	ÉÓÐÏÌØÚÕÅÔ ËÏÍÁÎÄÕ <a href="vwait.html"><strong>vwait</strong></a>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::data"></a><strong>::http::data</strong>
 | ||
|       <em>token</em></dt>
 | ||
| 
 | ||
|       <dd>üÔÁ ËÏÍÁÎÄÁ ×ÏÚ×ÒÁÝÁÅÔ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ
 | ||
| 	<strong>state(body)</strong>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::status"></a><strong>::http::status</strong>
 | ||
| 	<em>token</em></dt>
 | ||
| 
 | ||
|       <dd>üÔÁ ËÏÍÁÎÄÁ ×ÏÚ×ÒÁÝÁÅÔ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ
 | ||
| 	<strong>state(status)</strong>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::code"></a><strong>::http::code</strong>
 | ||
| 	<em>token</em></dt>
 | ||
|     
 | ||
|       <dd>üÔÁ ËÏÍÁÎÄÁ ×ÏÚ×ÒÁÝÁÅÔ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ
 | ||
| 	<strong>state(http)</strong>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt><a name="http::size"></a><strong>::http::size</strong>
 | ||
| 	<em>token</em></dt>
 | ||
| 
 | ||
|       <dd>üÔÁ ËÏÍÁÎÄÁ ×ÏÚ×ÒÁÝÁÅÔ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ
 | ||
| 	<strong>state(currentsize)</strong>.
 | ||
|       </dd>
 | ||
|     </dl>
 | ||
| 
 | ||
|     <h2><a name="íáóóé÷_óïóôïñîéñ_ôòáîúáëãéé"></a>íáóóé÷ óïóôïñîéñ ôòáîúáëãéé</h2>
 | ||
| 
 | ||
|     <p>ëÏÍÁÎÄÁ <a href="#http::geturl_url">
 | ||
| 	<strong>::http::geturl</strong></a> ×ÏÚ×ÒÁÝÁÅÔ <em>token</em> - ÉÍÑ
 | ||
| 	Tcl-ÍÁÓÓÉ×Á, ÓÏÄÅÒÖÁÝÅÇÏ ÉÎÆÏÒÍÁÃÉÀ Ï HTTP ÔÒÁÎÚÁËÃÉÉ. äÌÑ
 | ||
| 	ÕÐÒÏÝÅÎÉÑ ÄÏÓÔÕÐÁ Ë ÍÁÓÓÉ×Õ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÌÅÄÕÀÝÕÀ
 | ||
| 	ËÏÎÓÔÒÕËÃÉÀ:</p>
 | ||
|     <pre>
 | ||
|       upvar #0 $token state
 | ||
|     </pre>
 | ||
| 
 | ||
|     <p>íÁÓÓÉ× ÓÏÄÅÒÖÉÔ ÓÌÅÄÕÀÝÉÅ ÜÌÅÍÅÎÔÙ:</p>
 | ||
|     <dl>
 | ||
| 
 | ||
|       <dt>body</dt>
 | ||
| 
 | ||
|       <dd>óÏÄÅÒÖÁÎÉÅ ÄÏËÕÍÅÎÔÁ, ÚÁÄÁÎÎÏÇÏ Ó ÐÏÍÏÝØÀ URL. ðÕÓÔÏ, ÅÓÌÉ
 | ||
| 	ÕËÁÚÁÎÁ ÏÐÃÉÑ <strong>-channel</strong>. úÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ ÍÏÖÎÏ
 | ||
| 	ÐÏÌÕÞÉÔØ ÔÁËÖÅ Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ <a href=
 | ||
| 	"#http::data"><strong>::http::data</strong></a>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt>Óurrentsize</dt>
 | ||
| 
 | ||
|       <dd>ôÅËÕÝÉÊ ÏÂßÅÍ ÉÎÆÏÒÍÁÃÉÉ × ÂÁÊÔÁÈ, ÐÏÌÕÞÅÎÎÙÊ ÏÔ
 | ||
| 	ÉÓÔÏÞÎÉËÁ. úÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ ÍÏÖÎÏ ÐÏÌÕÞÉÔØ Ó ÐÏÍÏÝØÀ
 | ||
| 	ËÏÍÁÎÄÙ <a href="#http::size"><strong>::http::size</strong></a>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt>error</dt>
 | ||
| 
 | ||
|       <dd>åÓÌÉ ÜÌÅÍÅÎÔ ÏÐÒÅÄÅÌÅÎ, ÏÎ ÓÏÄÅÒÖÉÔ ÓÔÒÏËÕ Ó ÓÏÏÂÝÅÎÉÅÍ ÏÂ
 | ||
| 	ÏÛÉÂËÅ, ÐÏÌÕÞÅÎÎÕÀ ÐÒÉ ÐÒÅÒÙ×ÁÎÉÉ HTTP ÔÒÁÎÚÁËÃÉÉ.</dd>
 | ||
| 
 | ||
|       <dt>http</dt>
 | ||
| 
 | ||
|       <dd>üÌÅÍÅÎÔ ÓÏÄÅÒÖÉÔ ÚÎÁÞÅÎÉÅ HTTP ÓÔÁÔÕÓÁ, ÐÏÌÕÞÅÎÎÏÅ ÏÔ
 | ||
| 	ÓÅÒ×ÅÒÁ. úÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ ÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÔÁËÖÅ Ó ÐÏÍÏÝØÀ
 | ||
| 	ËÏÍÁÎÄÙ <a
 | ||
| 	href="#http::code"><strong>::http::code</strong></a>. óÔÁÔÕÓ
 | ||
| 	ÐÒÅÄÓÔÁ×ÌÑÅÔ ÓÏÂÏÊ ÓÔÒÏËÕ ÉÚ ÔÒÅÈ ÃÉÆÒ, ÚÎÁÞÅÎÉÑ ËÏÔÏÒÏÊ
 | ||
| 	ÓÏÏÔ×ÅÔÓÔ×ÕÀÔ HTTP ÓÔÁÎÄÁÒÔÕ. ëÏÄ 200 ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÕÓÐÅÛÎÏÍÕ
 | ||
| 	×ÙÐÏÌÎÅÎÉÀ ÔÒÁÎÚÁËÃÉÉ. ëÏÄÙ, ÎÁÞÉÎÁÀÝÉÅÓÑ Ó '4' ÉÌÉ '5';,
 | ||
| 	ÕËÁÚÙ×ÁÀÔ ÎÁ ÏÛÉÂËÕ. ëÏÄÙ, ÎÁÞÉÎÁÀÝÉÅÓÑ Ó '3', ÓÏÏÔ×ÅÔÓÔ×ÕÀÔ
 | ||
| 	ÏÛÉÂËÁÍ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ. ÷ ÜÔÏÍ ÓÌÕÞÁÅ ÍÅÔÁ ÄÁÎÎÙÅ
 | ||
| 	<strong>Location</strong> ÏÐÒÅÄÅÌÑÀÔ ÎÏ×ÙÊ ÉÓÔÏÞÎÉË ÉÎÆÏÒÍÁÃÉÉ, ËÏÔÏÒÙÊ
 | ||
| 	ÓÏÄÅÒÖÉÔ ÚÁÐÒÏÛÅÎÎÙÅ ÄÁÎÎÙÅ.</dd>
 | ||
| 
 | ||
|       <dt>meta</dt>
 | ||
| 
 | ||
|       <dd><p>íÅÔÁ ÄÁÎÎÙÅ, ÏÐÉÓÙ×ÁÀÝÉÅ ÓÏÄÅÒÖÁÎÉÅ ÄÏËÕÍÅÎÔÁ. äÁÎÎÙÊ
 | ||
|         ÜÌÅÍÅÎÔ ÍÁÓÓÉ×Á ÓÏÄÅÒÖÉÔ ÓÐÉÓÏË ËÌÀÞÅÊ É ÉÈ ÚÎÁÞÅÎÉÊ. þÔÏÂÙ
 | ||
|         ÏÂÌÅÇÞÉÔØ ÄÏÓÔÕÐ Ë ÄÁÎÎÙÍ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÌÅÄÕÀÝÕÀ
 | ||
|         ËÏÎÓÔÒÕËÃÉÀ:</p>
 | ||
| 	<pre>
 | ||
| 	  array set meta $state(meta)
 | ||
| 	</pre>
 | ||
|         <p>îÅËÏÔÏÒÙÅ ËÌÀÞÉ ÍÅÔÁ ÄÁÎÎÙÈ ÐÅÒÅÞÉÓÌÅÎÙ ÎÉÖÅ, ÎÏ × HTTP
 | ||
| 	  ÓÔÁÎÄÁÒÔÅ ÉÈ ÐÅÒÅÞÉÓÌÅÎÏ ÂÏÌØÛÅ, ËÒÏÍÅ ÔÏÇÏ, ÓÅÒ×ÅÒ ÍÏÖÅÔ
 | ||
| 	  ÄÏÂÁ×ÌÑÔØ ÓÏÂÓÔ×ÅÎÎÙÅ.</p>
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt>Content-Type</dt>
 | ||
| 
 | ||
|       <dd>ôÉÐ ÄÏËÕÍÅÎÔÁ. îÁÐÒÉÍÅÒ, <strong>text/html</strong>, <strong>image/gif</strong>,
 | ||
| 	<strong>application/postscript</strong> ÉÌÉ <strong>application/x-tcl</strong>.</dd>
 | ||
| 
 | ||
|       <dt>Content-Length</dt>
 | ||
| 
 | ||
|       <dd>ïÂßÑ×ÌÅÎÎÙÊ ÒÁÚÍÅÒ ÄÏËÕÍÅÎÔÁ. òÅÁÌØÎÙÊ ÏÂßÅÍ ÉÎÆÏÒÍÁÃÉÉ,
 | ||
|       ÐÏÌÕÞÅÎÎÏÊ Ó ÐÏÍÏÝØÀ ËÏÍÁÎÄÙ <a href="#http::geturl_url">
 | ||
|         <strong>::http::geturl</strong></a>, ÓÏÄÅÒÖÉÔÓÑ × ÐÅÒÅÍÅÎÎÏÊ
 | ||
| 	<strong>state(size)</strong>.
 | ||
|       </dd>
 | ||
| 
 | ||
|       <dt>Location</dt>
 | ||
| 
 | ||
|       <dd>éÚÍÅÎÅÎÎÙÊ ÁÄÒÅÓ ÄÏËÕÍÅÎÔÁ.</dd>
 | ||
| 
 | ||
|       <dt>status</dt>
 | ||
| 
 | ||
|       <dd>÷ÏÚÍÏÖÎÙÅ ÚÎÁÞÅÎÉÑ <strong>ok</strong>,<strong>reset</strong> ÉÌÉ
 | ||
| 	<strong>error</strong>. ÷Ï ×ÒÅÍÑ ÔÒÁÎÚÁËÃÉÉ ÚÎÁÞÅÎÉÅ ÐÕÓÔÏÅ.</dd>
 | ||
| 
 | ||
|       <dt>totalsize</dt>
 | ||
| 
 | ||
|       <dd>ëÏÐÉÑ ÚÎÁÞÅÎÉÑ ÍÅÔÁ ÄÁÎÎÙÈ <strong>Content-Length</strong>.</dd>
 | ||
| 
 | ||
|       <dt>type</dt>
 | ||
| 
 | ||
|       <dd>ëÏÐÉÑ ÚÎÁÞÅÎÉÑ ÍÅÔÁ ÄÁÎÎÙÈ <strong>Content-Type</strong>.</dd>
 | ||
| 
 | ||
|       <dt>url</dt>
 | ||
| 
 | ||
|       <dd><p>úÁÐÒÏÛÅÎÎÙÊ ÁÄÒÅÓ. ðÒÉÍÅÒ:</p>
 | ||
| 	<pre>
 | ||
| 	  # ëÏÐÉÒÏ×ÁÎÉÅ ÉÓÔÏÞÎÉËÁ × ÆÁÊÌ É ÐÅÞÁÔØ ÍÅÔÁ ÄÁÎÎÙÈ
 | ||
| 	  proc ::http::copy { url file {chunk 4096} } { 
 | ||
|               set out [open $file w]
 | ||
|               set token [geturl $url -channel $out -progress ::http::Progress \
 | ||
|                   -blocksize $chunk]
 | ||
|               close $out
 | ||
|               # óÌÅÄÕÀÝÁÑ ËÏÍÁÎÄÁ ÚÁ×ÅÒÛÁÅÔ ÓÔÒÏËÕ, ÎÁÞÁÔÕÀ
 | ||
|               # ÐÒÏÃÅÄÕÒÏÊ http::Progress
 | ||
|               puts stderr ""
 | ||
|               upvar #0 $token state
 | ||
|               set max 0
 | ||
|               foreach {name value} $state(meta) {
 | ||
|                   if {[string length $name] > $max} { 
 | ||
|                       set max [string length $name]
 | ||
| 	          }
 | ||
| 	          if {[regexp -nocase ^location$ $name]} { 
 | ||
|                       # ïÂÒÁÂÏÔËÁ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ ÁÄÒÅÓÁ 
 | ||
|                       puts stderr "Location:$value" 
 | ||
| 	              return [copy [string trim $value] $file $chunk] 
 | ||
| 	          }
 | ||
| 	      }
 | ||
| 	      incr max
 | ||
| 	      foreach {name value} $state(meta) { 
 | ||
| 	          puts [format "%-*s %s" $max $name: $value]
 | ||
| 	      }
 | ||
| 	      return $token 
 | ||
| 	  }
 | ||
| 	  proc ::http::Progress {args} { 
 | ||
| 	      puts -nonewline stderr . ;
 | ||
| 	      flush stderr
 | ||
| 	  }
 | ||
| 	</pre>
 | ||
|       </dd>
 | ||
|     </dl>
 | ||
|   </body>
 | ||
| </html>
 | 
