| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 13571 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.http.response">
- <title>Zend_Http_Response</title>
- <sect2 id="zend.http.response.introduction">
- <title>Introduction</title>
- <para><classname>Zend_Http_Response</classname> fournit un accès simplifié aux réponses HTTP d'un message, ainsi qu'un
- ensemble de méthodes statiques pour analyser ces réponses HTTP. Habituellement <classname>Zend_Http_Response</classname>
- est utilisé en tant qu'objet retourné par une requête <classname>Zend_Http_Client</classname>.</para>
- <para>Dans la plupart des cas, un objet <classname>Zend_Http_Response</classname> sera instancié en utilisant la méthode
- <code>factory()</code>, qui lit une chaîne contenant une réponse HTTP, et retourne un nouvel objet
- <classname>Zend_Http_Response</classname> : <example id="zend.http.response.introduction.example-1">
- <title>Instancier un objet Zend_Http_Response en utilisant la méthode factory</title>
- <programlisting role="php"><![CDATA[
- $str = '';
- $sock = fsockopen('www.exemple.com', 80);
- $req = "GET / HTTP/1.1\r\n" .
- "Host: www.exemple.com\r\n" .
- "Connection: close\r\n" .
- "\r\n";
- fwrite($sock, $req);
- while ($buff = fread($sock, 1024))
- $str .= $sock;
- $response = Zend_Http_Response::factory($str);
- ]]></programlisting>
- </example></para>
- <para>Vous pouvez aussi utiliser le constructeur pour créer un nouvel objet de réponse HTTP, en spécifiant tous
- les paramètres de la réponse :</para>
- <para><code> public function __construct($code, $headers, $body = null, $version = '1.1', $message = null)
- </code></para>
- <itemizedlist>
- <listitem>
- <para><code>$code</code> : le code de la réponse HTTP (par ex. 200, 404, etc.)</para>
- </listitem>
- <listitem>
- <para><code>$headers</code> : un tableau associatif d'en-têtes de réponse HTTP (par ex. "Host" =>
- "exemple.com")</para>
- </listitem>
- <listitem>
- <para><code>$body</code> : le corps de la réponse sous la forme d'une chaîne</para>
- </listitem>
- <listitem>
- <para><code>$version</code> : la version de la réponse HTTP (habituellement 1.0 ou 1.1)</para>
- </listitem>
- <listitem>
- <para><code>$message</code> : le message de la réponse HTTP (par ex. "OK", "Internal Server Error"). Si
- non spécifié, le message sera paramétré suivant le code de la réponse.</para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.http.response.testers">
- <title>Méthodes de tests booléennes</title>
- <para>Une fois qu'un objet <classname>Zend_Http_Response</classname> est instancié, il fournit plusieurs méthodes qui
- peuvent être utilisées pour tester le type de la réponse. Elles retournent toutes un booléen <code>true</code>
- ou <code>false</code> : <itemizedlist>
- <listitem>
- <para><code>isSuccessful()</code> : la requête est réussie ou non. Retourne <code>true </code> pour
- les codes de réponses HTTP 1xx et 2xx.</para>
- </listitem>
- <listitem>
- <para><code>isError()</code> : la requête implique une erreur ou non. Retourne <code>true </code>
- pour les codes de réponses HTTP 4xx (erreurs du client) et 5xx (erreurs du serveur).</para>
- </listitem>
- <listitem>
- <para><code>isRedirect()</code> : la requête est une redirection ou non. Retourne <code>true </code>
- pour les codes de réponses HTTP 3xx.</para>
- </listitem>
- </itemizedlist> <example id="zend.http.response.testers.example-1">
- <title>Utiliser la méthode isError() pour valider une réponse</title>
- <programlisting role="php"><![CDATA[
- if ($response->isError()) {
- echo "Erreur de transmission des données.\n"
- echo "Les infos Serveur sont : "
- . $response->getStatus()
- . " " . $response->getMessage()
- . "\n";
- }
- // ... traiter la réponse ici ...
- ]]></programlisting>
- </example></para>
- </sect2>
- <sect2 id="zend.http.response.acessors">
- <title>Méthodes accesseurs</title>
- <para>Le but principal de l'objet réponse est de fournir un accès facile à divers paramètres de la réponse.
- <itemizedlist>
- <listitem>
- <para><code>int getStatus()</code> : récupère le code de la réponse HTTP (par ex. 200, 504,
- etc.)</para>
- </listitem>
- <listitem>
- <para><code>string getMessage()</code> : récupère le message de la réponse HTTP (par ex. "Not
- Found", "Authorization Required")</para>
- </listitem>
- <listitem>
- <para><code>string getBody()</code> : récupère le corps complet décodé de la réponse HTTP</para>
- </listitem>
- <listitem>
- <para><code>string getRawBody()</code> : récupère le corps brut, possiblement encodé, de la réponse
- HTTP. Si le corps est encodé en utilisant l'encodage GZIP par exemple, il ne sera pas décodé.</para>
- </listitem>
- <listitem>
- <para><code>array getHeaders()</code> : récupère les en-têtes de la réponse HTTP sous la forme d'un
- tableau associatif (par ex. 'Content-type' => 'text/html')</para>
- </listitem>
- <listitem>
- <para><code>string|array getHeader($header)</code> : récupère un en-tête spécifique de la réponse
- HTTP, spécifié par <code>$header</code></para>
- </listitem>
- <listitem>
- <para><code>string getHeadersAsString($status_line = true, $br = "\n")</code> : récupère l'ensemble
- des en-têtes sous la forme d'une chaîne. Si <code>$status_line</code> est à <code>true</code>
- (défaut), la première ligne de statut (par ex. "HTTP/1.1 200 OK") sera aussi retournée. Les lignes
- sont coupées avec le paramètre <code>$br</code> (par ex. "<br />")</para>
- </listitem>
- <listitem>
- <para><code>string asString($br = "\n")</code> : récupère la réponse complète sous la forme d'une
- chaîne. Les lignes sont coupées avec le paramètre <code>$br</code> (par ex. "<br />")</para>
- </listitem>
- </itemizedlist> <example id="zend.http.response.acessors.example-1">
- <title>Utiliser les méthodes accesseurs de Zend_Http_Response</title>
- <programlisting role="php"><![CDATA[
- if ($response->getStatus() == 200) {
- echo "La requête retourne les informations suivantes :<br />";
- echo $response->getBody();
- } else {
- echo "Une erreur est apparue lors de la recherche des données :<br />";
- echo $response->getStatus() . ": " . $response->getMessage();
- }
- ]]></programlisting>
- </example> <note>
- <title>Vérifier toujours la valeur retournée</title>
- <para>Puisqu'une réponse peut contenir plusieurs exemplaires du même en-tête, la méthode
- <code>getHeader()</code> et la méthode <code>getHeaders()</code> peuvent renvoyer l'un comme l'autre
- soit une chaîne seule, soit un tableau de chaînes pour chaque en-tête. Vous devez donc toujours vérifier
- si la valeur retournée est une chaîne ou un tableau.</para>
- </note> <example id="zend.http.response.acessors.example-2">
- <title>Accéder aux en-têtes de réponse</title>
- <programlisting role="php"><![CDATA[
- $ctype = $response->getHeader('Content-type');
- if (is_array($ctype)) $ctype = $ctype[0];
- $body = $response->getBody();
- if ($ctype == 'text/html' || $ctype == 'text/xml') {
- $body = htmlentities($body);
- }
- echo $body;
- ]]></programlisting>
- </example></para>
- </sect2>
- <sect2 id="zend.http.response.static_parsers">
- <title>Analyseurs statiques de réponse HTTP</title>
- <para>La classe <classname>Zend_Http_Response</classname> inclut également plusieurs méthodes utilisées en interne pour
- traiter et analyser des messages de réponse HTTP. Ces méthodes sont toutes exposées en tant que méthodes
- statiques, ce qui permet de les utiliser extérieurement, ainsi il n'est pas nécessaire d'instancier un objet
- réponse si vous souhaitez extraire une partie spécifique de la réponse. <itemizedlist>
- <listitem>
- <para><code>int Zend_Http_Response::extractCode($response_str)</code> : extrait et retourne le code
- de la réponse HTTP (par ex. 200 ou 404) issu de<code>$response_str</code></para>
- </listitem>
- <listitem>
- <para><code>string Zend_Http_Response::extractMessage($response_str)</code> : extrait et retourne le
- message de la réponse HTTP (par ex. "OK" ou "File Not Found") issu de
- <code>$response_str</code></para>
- </listitem>
- <listitem>
- <para><code>string Zend_Http_Response::extractVersion($response_str)</code> : extrait et retourne la
- version HTTP (par ex. 1.1 or 1.0) issue de <code>$response_str</code></para>
- </listitem>
- <listitem>
- <para><code>array Zend_Http_Response::extractHeaders($response_str)</code> : extrait et retourne les
- en-têtes de la réponse HTTP issus de <code>$response_str</code> sous la forme d'un tableau</para>
- </listitem>
- <listitem>
- <para><code>string Zend_Http_Response::extractBody($response_str)</code> : extrait et retourne le
- corps de la réponse HTTP issu de <code>$response_str</code></para>
- </listitem>
- <listitem>
- <para><code>string Zend_Http_Response::responseCodeAsText($code = null, $http11 = true)</code> :
- récupère le message standard de la réponse HTTP pour le code <code>$code</code>. Par exemple, la
- méthode retournera "Internal Server Error" si <code>$code</code> vaut 500. Si <code>$http11</code>
- vaut <code>true</code> (valeur par défaut), la méthode retournera les messages standards HTTP/1.1 -
- sinon les messages HTTP/1.0 seront retournés. Si <code>$code</code> n'est pas spécifié, cette
- méthode retournera tous les codes de réponse HTTP connus sous la forme d'un tableau associatif (code
- => message).</para>
- </listitem>
- </itemizedlist></para>
- <para>Indépendamment des méthodes d'analyse, la classe inclut également un ensemble de décodeurs pour les
- encodages de transfert de réponse HTTP communs : <itemizedlist>
- <listitem>
- <para><code>string Zend_Http_Response::decodeChunkedBody($body)</code>: décode un corps complet de
- type "Content-Transfer-Encoding: Chunked"</para>
- </listitem>
- <listitem>
- <para><code>string Zend_Http_Response::decodeGzip($body)</code> : décode un corps de type
- "Content-Encoding: gzip"</para>
- </listitem>
- <listitem>
- <para><code>string Zend_Http_Response::decodeDeflate($body)</code> : décode un corps de type
- "Content-Encoding: deflate"</para>
- </listitem>
- </itemizedlist></para>
- </sect2>
- </sect1>
|