Zend_Http_Client.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <!-- EN-Revision: 13623 -->
  2. <sect1 id="zend.http.client">
  3. <title>Introduction</title>
  4. <para><classname>Zend_Http_Client</classname> fournit une interface qui permet d'utiliser le protocole HTTP (Hyper-Text
  5. Transfer Protocol). <classname>Zend_Http_Client</classname> supporte les fonctionnalités de base d'un client HTTP, ainsi que
  6. des fonctionnalités plus avancées, comme l'authentification ou l'upload de fichiers. Toutes les requêtes retournent
  7. un objet Zend_Http_Response, avec lequel on pourra accéder au corps ou aux en-têtes de la réponse HTTP (voyez <xref
  8. linkend="zend.http.response" />).</para>
  9. <sect2 id="zend.http.client.introduction">
  10. <title>Utilisation de Zend_Http_Client</title>
  11. <para>Le constructeur de classe accepte deux paramètres : l'URI (ou un objet
  12. <code><classname>Zend_Uri_Http</classname></code>), et un tableau de configuration. Ils peuvent aussi être définis avec
  13. des méthodes plus tard : <code>setUri()</code> et <code>setConfig()</code>. <example
  14. id="zend.http.client.introduction.example-1">
  15. <title>Instanciation d'un objet Zend_Http_Client</title>
  16. <programlisting role="php"><![CDATA[
  17. $client = new Zend_Http_Client('http://example.org', array(
  18. 'maxredirects' => 0,
  19. 'timeout' => 30));
  20. // OU
  21. $client = new Zend_Http_Client();
  22. $client->setUri('http://example.org');
  23. $client->setConfig(array(
  24. 'maxredirects' => 0,
  25. 'timeout' => 30));
  26. ]]></programlisting>
  27. </example></para>
  28. <note>
  29. <para><classname>Zend_Http_Client</classname> utilise <classname>Zend_Uri_Http</classname> pour valider les URLs. Ce qui veut
  30. dire que certains caractères comme les pipes ("|") ou le symbole "^" ne seront pas acceptés par défaut dans
  31. les URLs. Ceci peut être modifié par le réglage de l'option "allow_unwise" de <classname>Zend_Uri</classname> à
  32. <code>true</code>. Voir <xref linkend="zend.uri.validation.allowunwise" /> pour de plus amples
  33. informations.</para>
  34. </note>
  35. </sect2>
  36. <sect2 id="zend.http.client.configuration">
  37. <title>Les paramètres de configuration</title>
  38. <para>Le constructeur et <code>setConfig()</code> acceptent un tableau associatif de paramètre de configuration.
  39. Fixer ces paramètres est optionnel, ils ont tous une valeur par défaut. <table
  40. id="zend.http.client.configuration.table">
  41. <title>Zend_Http_Client : paramètres de configuration</title>
  42. <tgroup cols="4">
  43. <thead>
  44. <row>
  45. <entry>Paramètre</entry>
  46. <entry>Description</entry>
  47. <entry>Valeur attendue</entry>
  48. <entry>Valeur par défaut</entry>
  49. </row>
  50. </thead>
  51. <tbody>
  52. <row>
  53. <entry>maxredirects</entry>
  54. <entry>Nombre maximum de redirections à suivre (0 = aucune)</entry>
  55. <entry>entier</entry>
  56. <entry>5</entry>
  57. </row>
  58. <row>
  59. <entry>strict</entry>
  60. <entry>Validation faite ou non sur les noms d'en-têtes. Si à <code>false</code>, des
  61. fonctions de validation n'interviendront pas. Habituellement ceci ne devrait pas être
  62. changé</entry>
  63. <entry>booléen</entry>
  64. <entry><code>true</code></entry>
  65. </row>
  66. <row>
  67. <entry>strictredirects</entry>
  68. <entry>Est ce que le client doit suivre strictement les redirections selon la RFC2616 ?
  69. (voyez <xref linkend="zend.http.client.redirections" />)</entry>
  70. <entry>booléen</entry>
  71. <entry><code>false</code></entry>
  72. </row>
  73. <row>
  74. <entry>useragent</entry>
  75. <entry>La chaîne User Agent du client (envoyée en en-tête de requête)</entry>
  76. <entry>chaîne</entry>
  77. <entry>'Zend_Http_Client'</entry>
  78. </row>
  79. <row>
  80. <entry>timeout</entry>
  81. <entry>Connexion timeout (secondes)</entry>
  82. <entry>entier</entry>
  83. <entry>10</entry>
  84. </row>
  85. <row>
  86. <entry>httpversion</entry>
  87. <entry>Version du protocole HTTP à utiliser ('1.1', '1.0' ou '0.9')</entry>
  88. <entry>chaîne</entry>
  89. <entry>'1.1'</entry>
  90. </row>
  91. <row>
  92. <entry>adapter</entry>
  93. <entry>Classe adaptateur à utiliser (voyez <xref
  94. linkend="zend.http.client.adapters" />)</entry>
  95. <entry>mixed</entry>
  96. <entry>'Zend_Http_Client_Adapter_Socket'</entry>
  97. </row>
  98. <row>
  99. <entry>keepalive</entry>
  100. <entry>Utilisation du pipelining HTTP (connexion ouverte après déconnexion du
  101. client)</entry>
  102. <entry>booléen</entry>
  103. <entry><code>false</code></entry>
  104. </row>
  105. <row>
  106. <entry>storeresponse</entry>
  107. <entry>Stockage ou non de la dernière réponse pour une récupération ultérieure avec
  108. <code>getLastResponse()</code>. Si réglez à <code>false</code>,
  109. <code>getLastResponse()</code> retournera <code>null</code>.</entry>
  110. <entry>booléen</entry>
  111. <entry><code>true</code></entry>
  112. </row>
  113. </tbody>
  114. </tgroup>
  115. </table></para>
  116. </sect2>
  117. <sect2 id="zend.http.client.basic-requests">
  118. <title>Utilisation basique</title>
  119. <para>Exécuter des requêtes HTTP basiques est très simple grâce à la méthode <code>request()</code>, et ceci
  120. nécessite rarement plus d'une ligne de code : <example id="zend.http.client.basic-requests.example-1">
  121. <title>Requête GET simple</title>
  122. <programlisting role="php"><![CDATA[
  123. $client = new Zend_Http_Client('http://example.org');
  124. $response = $client->request();
  125. ]]></programlisting>
  126. </example> La méthode <code>request()</code> accepte un paramètre optionnel définissant la méthode HTTP, -
  127. GET, POST, PUT, HEAD, DELETE, TRACE, OPTIONS ou CONNECT - comme définies dans la RFC 2616 concernant le
  128. protocole HTTP <footnote>
  129. <para>Voyez la RFC 2616 - <ulink url="http://www.w3.org/Protocols/rfc2616/rfc2616.html"></ulink>.</para>
  130. </footnote>. Ces méthodes HTTP sont aussi définies en tant que constantes de classe, Zend_Http_Request::GET,
  131. Zend_Http_Request::POST, etc...</para>
  132. <para>Si aucune méthode de requêtage HTTP n'est définie, alors la dernière utilisée via <code>setMethod()</code>
  133. sera utilisée. Si <code>setMethod()</code> n'a jamais été appelée, GET est alors utilisée par défaut. <example
  134. id="zend.http.client.basic-requests.example-2">
  135. <title>Requêtes d'autres types que GET</title>
  136. <programlisting role="php"><![CDATA[
  137. // requête POST
  138. $response = $client->request('POST');
  139. // autre manière de faire :
  140. $client->setMethod(Zend_Http_Client::POST);
  141. $response = $client->request();
  142. ]]></programlisting>
  143. </example></para>
  144. </sect2>
  145. <sect2 id="zend.http.client.parameters">
  146. <title>Ajouts de paramètres GET et POST</title>
  147. <para>Ajouter des paramètres GET à la requête HTTP est très simple. Vous pouvez les ajouter en tant que partie
  148. de l'URL désirée, ou en utilisant la méthode <code>setParameterGet()</code>. Celle-ci prend en premier paramètre
  149. le nom du paramètre GET, et en second sa valeur. Un tableau associatif peut aussi être utilisé. <example
  150. id="zend.http.client.parameters.example-1">
  151. <title>Ajouts de paramètres GET</title>
  152. <programlisting role="php"><![CDATA[
  153. // Avec la méthode setParameterGet
  154. $client->setParameterGet('knight', 'lancelot');
  155. // Ce qui est équivalent à :
  156. $client->setUri('http://example.com/index.php?knight=lancelot');
  157. // Ajout de plusieurs paramètres en un appel
  158. $client->setParameterGet(array(
  159. 'first_name' => 'Bender',
  160. 'middle_name' => 'Bending'
  161. 'made_in' => 'Mexico',
  162. ));
  163. ]]></programlisting>
  164. </example></para>
  165. <para>Coté POST, c'est très similaire à GET, sauf que les paramètres POST doivent faire partie du corps de la
  166. requête. Il n'est donc pas possible de les ajouter dans l'URL. Utilisez simplement
  167. <code>setParameterPost()</code> de la même manière que sa soeur <code>setParameterGet()</code>. <example
  168. id="zend.http.client.parameters.example-2">
  169. <title>Ajout de paramètres POST</title>
  170. <programlisting role="php"><![CDATA[
  171. // passage de paramètre POST simple
  172. $client->setParameterPost('language', 'fr');
  173. // Plusieurs paramètres, dont un avec plusieurs valeurs
  174. $client->setParameterPost(array(
  175. 'language' => 'es',
  176. 'country' => 'ar',
  177. 'selection' => array(45, 32, 80)
  178. ));
  179. ]]></programlisting>
  180. </example> Notez qu'en plus de paramètres POST, vous pouvez ajouter des paramètres GET à une requête POST.
  181. Le contraire n'est pas possible, ainsi les paramètres POST ajoutés à une requête GET seront acceptés certes,
  182. mais ignorés.</para>
  183. </sect2>
  184. <sect2 id="zend.http.client.accessing_last">
  185. <title>Accéder à la dernière requête, ou réponse</title>
  186. <para><classname>Zend_Http_Client</classname> fournit un moyen d'accéder à la dernière requête qu'il a effectuée, ainsi
  187. qu'à la dernière réponse qu'il a reçue. <classname>Zend_Http_Client-&gt;getLastRequest()</classname> ne prends pas de
  188. paramètres et retourne la dernière requête sous forme de chaîne de caractères.
  189. <classname>Zend_Http_Client-&gt;getLastResponse()</classname> retourne elle la dernière réponse, mais sous forme d'objet
  190. <link linkend="zend.http.response">Zend_Http_Response</link>.</para>
  191. </sect2>
  192. </sect1>
  193. <!--
  194. vim:se ts=4 sw=4 et:
  195. -->