| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15617 -->
- <!-- 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 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::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 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 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 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 <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 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 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>
|