| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- 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
- <acronym>HTTP</acronym> d'un message, ainsi qu'un ensemble de méthodes statiques pour analyser ces réponses
- <acronym>HTTP</acronym>. 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 <methodname>fromString()</methodname>, 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 language="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::fromString($str);
- ]]></programlisting>
- </example>
- </para>
- <para>
- Vous pouvez aussi utiliser le constructeur pour créer un nouvel objet de réponse
- <acronym>HTTP</acronym>, 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>
- <varname>$code</varname> : le code de la réponse <acronym>HTTP</acronym> (par ex. 200, 404,
- etc.)
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>$headers</varname> : un tableau associatif d'en-têtes de réponse <acronym>HTTP</acronym>
- (par ex. "Host" => "exemple.com")
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>$body</varname> : le corps de la réponse sous la forme d'une
- chaîne
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>$version</varname> : la version de la réponse <acronym>HTTP</acronym> (habituellement 1.0
- ou 1.1)
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>$message</varname> : le message de la réponse <acronym>HTTP</acronym> (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 <constant>TRUE</constant> ou <constant>FALSE</constant> :
- <itemizedlist>
- <listitem>
- <para>
- <methodname>isSuccessful()</methodname> : la requête est réussie ou non. Retourne
- <code>true </code> pour les codes de réponses <acronym>HTTP</acronym> 1xx et 2xx.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>isError()</methodname> : la requête implique une erreur ou non.
- Retourne <code>true </code> pour les codes de réponses <acronym>HTTP</acronym> 4xx (erreurs du
- client) et 5xx (erreurs du serveur).
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>isRedirect()</methodname> : la requête est une redirection ou non.
- Retourne <code>true </code> pour les codes de réponses <acronym>HTTP</acronym> 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 language="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 <acronym>HTTP</acronym>
- (par ex. 200, 504, etc.)
- </para>
- </listitem>
- <listitem>
- <para>
- <code>string getMessage()</code> : récupère le message de la réponse
- <acronym>HTTP</acronym> (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 <acronym>HTTP</acronym>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>string getRawBody()</code> : récupère le corps brut,
- possiblement encodé, de la réponse <acronym>HTTP</acronym>. 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
- <acronym>HTTP</acronym> 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 <acronym>HTTP</acronym>, spécifié par <varname>$header</varname>
- </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 <varname>$status_line</varname> est à <constant>TRUE</constant> (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 <varname>$br</varname> (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 <varname>$br</varname> (par ex. "<br />"). Vous pouvez aussi
- utiliser la méthode magique <methodname>__toString()</methodname> lors du
- cast de l'objet en chaîne de caractère. Ce sera alors proxié vers
- <methodname>asString()</methodname>.
- </para>
- </listitem>
- </itemizedlist> <example id="zend.http.response.acessors.example-1">
- <title>Utiliser les méthodes accesseurs de Zend_Http_Response</title>
- <programlisting language="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 <methodname>getHeader()</methodname> et la méthode <methodname>getHeaders()</methodname> 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 language="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 <acronym>HTTP</acronym>. 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 <acronym>HTTP</acronym> (par ex. 200 ou 404) issu
- de<varname>$response_str</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>string Zend_Http_Response::extractMessage($response_str)</code>
- : extrait et retourne le message de la réponse <acronym>HTTP</acronym> (par ex. "OK" ou "File
- Not Found") issu de <varname>$response_str</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>string Zend_Http_Response::extractVersion($response_str)</code>
- : extrait et retourne la version <acronym>HTTP</acronym> (par ex. 1.1 or 1.0) issue de
- <varname>$response_str</varname>
- </para>
- </listitem>
- <listitem>
- <para>
- <code>array Zend_Http_Response::extractHeaders($response_str)</code> :
- extrait et retourne les en-têtes de la réponse <acronym>HTTP</acronym> issus de
- <varname>$response_str</varname> 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 <acronym>HTTP</acronym> issu de
- <varname>$response_str</varname>
- </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 <acronym>HTTP</acronym>
- pour le code <varname>$code</varname>. Par exemple, la méthode retournera
- "Internal Server Error" si <varname>$code</varname> vaut 500. Si
- <varname>$http11</varname> vaut <constant>TRUE</constant> (valeur par défaut), la méthode
- retournera les messages standards <acronym>HTTP</acronym>/1.1 - sinon les messages <acronym>HTTP</acronym>/1.0
- seront retournés. Si <varname>$code</varname> n'est pas spécifié, cette méthode
- retournera tous les codes de réponse <acronym>HTTP</acronym> 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 <acronym>HTTP</acronym> 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>
|