Zend_Http_Response.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17172 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.http.response">
  5. <title>Zend_Http_Response</title>
  6. <sect2 id="zend.http.response.introduction">
  7. <title>Einführung</title>
  8. <para>
  9. <classname>Zend_Http_Response</classname> stellt den einfachen Zugriff auf eine HTTP
  10. Rückantwort sowie einige statische Methoden zum Analysieren der HTTP Rückantworten
  11. bereit. Normalerweise wird <classname>Zend_Http_Response</classname> als ein Objekt
  12. verwendet, dass von einer <classname>Zend_Http_Client</classname> Anfrage zurückgegeben
  13. wurde.
  14. </para>
  15. <para>
  16. In den meisten Fällen wird ein Zend_Http_Response Objekt über die factory() Methode
  17. instanziert, die einen String liest, der eine HTTP Rückantwort enthält und ein
  18. Zend_Http_Response Objekt zurückgibt.
  19. <example id="zend.http.response.introduction.example-1">
  20. <title>Ein Zend_Http_Response Object über die factory Methode instanzieren</title>
  21. <programlisting language="php"><![CDATA[
  22. $str = '';
  23. $sock = fsockopen('www.example.com', 80);
  24. $req = "GET / HTTP/1.1\r\n" .
  25. "Host: www.example.com\r\n" .
  26. "Connection: close\r\n" .
  27. "\r\n";
  28. fwrite($sock, $req);
  29. while ($buff = fread($sock, 1024))
  30. $str .= $sock;
  31. $response = Zend_Http_Response::factory($str);
  32. ]]></programlisting>
  33. </example>
  34. </para>
  35. <para>
  36. Man kann auch die Konstruktormethode verwenden, um ein neues Response Objekt zu
  37. erstellen, indem man alle Parameter für die Antwort angibt:
  38. </para>
  39. <para>
  40. <code>
  41. public function __construct($code, $headers, $body = null, $version = '1.1',
  42. $message = null)
  43. </code>
  44. </para>
  45. <itemizedlist>
  46. <listitem>
  47. <para>
  48. <varname>$code</varname>: Der HTTP Antwortcode(eg. 200, 404, etc.)
  49. </para>
  50. </listitem>
  51. <listitem>
  52. <para>
  53. <varname>$headers</varname>: Ein assoziatives Array mit HTTP Antwort Headers
  54. (z.B. 'Host' => 'example.com')
  55. </para>
  56. </listitem>
  57. <listitem>
  58. <para>
  59. <varname>$body</varname>: Der Hauptteil der Antwort als String
  60. </para>
  61. </listitem>
  62. <listitem>
  63. <para>
  64. <varname>$version</varname>: Der Version der HTTP Antwort (normalerweise 1.0
  65. oder 1.1)
  66. </para>
  67. </listitem>
  68. <listitem>
  69. <para>
  70. <varname>$message</varname>: Die HTTP Rückantwort (z.B. 'OK', 'Internal Server
  71. Error'). Falls nicht angegeben, wird die Rückantwort anhand des Antwortcode
  72. gesetzt.
  73. </para>
  74. </listitem>
  75. </itemizedlist>
  76. </sect2>
  77. <sect2 id="zend.http.response.testers">
  78. <title>Boolesche Testmethoden</title>
  79. <para>
  80. Sobald ein <classname>Zend_Http_Response</classname> Objekt instantiert ist, stellt es
  81. mehrere Methoden bereit, die zum Testen des Typs der Antwort verwendet werden können.
  82. Diese geben alle ein boolesches true oder false zurück:
  83. <itemizedlist>
  84. <listitem>
  85. <para>
  86. <code>Boolean isSuccessful()</code>: Ob die Anfrage erfolgreoch war oder
  87. nicht. Gibt TRUE für HTTP 1xx und 2xx Antwortcodes zurück.
  88. </para>
  89. </listitem>
  90. <listitem>
  91. <para>
  92. <code>Boolean isError()</code>: Ob der Antwortcode auf einen Fehler
  93. rückschließen lässt oder nicht. Gibt TRUE für HTTP 4xx (Client Fehler) und
  94. 5xx (Server Fehler) Antwortcodes zurück.
  95. </para>
  96. </listitem>
  97. <listitem>
  98. <para>
  99. <code>Boolean isRedirect()</code>: Ob die Antwort eine Weiterleitung ist
  100. oder nicht. Gibt TRUE für HTTP 3xx Antwortcodes zurück.
  101. </para>
  102. </listitem>
  103. </itemizedlist>
  104. <example id="zend.http.response.testers.example-1">
  105. <title>Die isError() Method verwenden, um eine Antwort zu validieren</title>
  106. <programlisting language="php"><![CDATA[
  107. if ($response->isError()) {
  108. echo "Error transmitting data.\n"
  109. echo "Server reply was: " . $response->getStatus() .
  110. " " . $response->getMessage() . "\n";
  111. }
  112. // .. verarbeite die Antwort hier...
  113. ]]></programlisting>
  114. </example>
  115. </para>
  116. </sect2>
  117. <sect2 id="zend.http.response.acessors">
  118. <title>Zugriffsmethoden</title>
  119. <para>
  120. Der Hauptzweck eines Response Okjektes ist der einfache Zugriff auf diverse
  121. Antwortparameter.
  122. <itemizedlist>
  123. <listitem>
  124. <para>
  125. <code>int getStatus()</code>: Erhalte den HTTP Antwortstatuscode (z.B.
  126. 200, 504, etc.) zurück
  127. </para>
  128. </listitem>
  129. <listitem>
  130. <para>
  131. <code>string getMessage()</code>: Erhalte die HTTP Antwortstatus Meldung
  132. (z.B. "Not Found", "Authorization Required") zurück.
  133. </para>
  134. </listitem>
  135. <listitem>
  136. <para>
  137. <code>string getBody()</code>: Erhalte den kompletten dekodierten Hauptteil
  138. der HTTP Antwort zurück
  139. </para>
  140. </listitem>
  141. <listitem>
  142. <para>
  143. <code>string getRawBody()</code>: Erhalte die rohen, möglicherweise
  144. kodierten Hauptteil der HTTP Antwort zurück. Wenn der Hauptteil z.B. mittels
  145. GZIP kodiert wurde, wird er nicht dekodiert.
  146. </para>
  147. </listitem>
  148. <listitem>
  149. <para>
  150. <code>array getHeaders()</code>: Erhalte die HTTP Antwort Header als
  151. assoziatives Array (z.B. 'Content-type' => 'text/html') zurück.
  152. </para>
  153. </listitem>
  154. <listitem>
  155. <para>
  156. <code>string|array getHeader($header)</code>: Erhalte einen spezifischen
  157. HTTP Antwort Header zurück, der durch $header angegeben wird.
  158. </para>
  159. </listitem>
  160. <listitem>
  161. <para>
  162. <code>string getHeadersAsString($status_line = true, $br = "\n")</code>:
  163. Erhalte den kompletten Header Satz als String zurück. Wenn $status_line
  164. auf true gesetzt ist (Standardwert), wird die erste Statuszeile (z.B.
  165. "HTTP/1.1 200 OK") ebenfalls zurück gegeben. Die Zeilen werden durch den
  166. $br Parameter umgebrochen (kann z.B. "&lt;br /&gt;" sein).
  167. </para>
  168. </listitem>
  169. <listitem>
  170. <para>
  171. <code>string asString($br = "\n")</code>: Erhalte die komplette Rückantwort
  172. als String zurück. Die Zeilen werden durch den $br Parameter umgebrochen
  173. (kann z.B. "&lt;br /&gt;" sein). Man kann auch die matische __toString()
  174. Methode verwenden wenn man das Objekt in einen String casten will. Diese
  175. wird dann auf asString() weiterleiten
  176. </para>
  177. </listitem>
  178. </itemizedlist>
  179. <example id="zend.http.response.acessors.example-1">
  180. <title>Zend_Http_Response Zugriffsmethoden verwenden</title>
  181. <programlisting language="php"><![CDATA[
  182. if ($response->getStatus() == 200) {
  183. echo "The request returned the following information:<br />";
  184. echo $response->getBody();
  185. } else {
  186. echo "An error occurred while fetching data:<br />";
  187. echo $response->getStatus() . ": " . $response->getMessage();
  188. }
  189. ]]></programlisting>
  190. </example>
  191. <note>
  192. <title>Immer die Rückgabewerte prüfen</title>
  193. <para>
  194. Weil eine Antwort mehrere Instanzen des selben Headers beinhalten kann, können
  195. die getHeader() Methode und getHeaders() Methode entweder einen einzelnen String
  196. oder ein Array mit Strings für jeden Header zurückgeben. Man sollte immer
  197. prüfen, ob der Rückgabewert ein String oder ein Array ist.
  198. </para>
  199. </note>
  200. <example id="zend.http.response.acessors.example-2">
  201. <title>Auf Antwort Header zugreifen</title>
  202. <programlisting language="php"><![CDATA[
  203. $ctype = $response->getHeader('Content-type');
  204. if (is_array($ctype)) $ctype = $ctype[0];
  205. $body = $response->getBody();
  206. if ($ctype == 'text/html' || $ctype == 'text/xml') {
  207. $body = htmlentities($body);
  208. }
  209. echo $body;
  210. ]]></programlisting>
  211. </example>
  212. </para>
  213. </sect2>
  214. <sect2 id="zend.http.response.static_parsers">
  215. <title>Statische HTTP Antwortanalysierer</title>
  216. <para>
  217. Die <classname>Zend_Http_Response</classname> Klasse beinhaltet auch verschiedene,
  218. intern verwendete Methoden für die Verarbeitung und Analyse der HTTP Rückantworten
  219. bereit. Diese Methoden sind alle als statische Methoden eingerichtet, so dass man sie
  220. extern verwenden kann, ohne dass man ein Response Objekt instanzierebn muss und nur
  221. einen bestimmten Teil der Antwort extrahieren möchte.
  222. <itemizedlist>
  223. <listitem>
  224. <para>
  225. <code>int Zend_Http_Response::extractCode($response_str)</code>: Extrahiere
  226. den HTTP Antwortcode (z.B. 200 oder 404) von $response_str und gebe ihn
  227. zurück.
  228. </para>
  229. </listitem>
  230. <listitem>
  231. <para>
  232. <code>string Zend_Http_Response::extractMessage($response_str)</code>:
  233. Extrahiere die HTTP Rückantwort (z.B. "OK" oder "File Not Found") von
  234. $response_str und gebe sie zurück.
  235. </para>
  236. </listitem>
  237. <listitem>
  238. <para>
  239. <code>string Zend_Http_Response::extractVersion($response_str)</code>: :
  240. Extrahiere die HTTP Version (z.B. 1.1 oder 1.0) von $response_str und gebe
  241. sie zurück.
  242. </para>
  243. </listitem>
  244. <listitem>
  245. <para>
  246. <code>array Zend_Http_Response::extractHeaders($response_str)</code>:
  247. Extrahiere die HTTP Antwort Header von response_str und gebe sie in einem
  248. Array zurück.
  249. </para>
  250. </listitem>
  251. <listitem>
  252. <para>
  253. <code>string Zend_Http_Response::extractBody($response_str)</code>:
  254. Extrahiere den HTTP Antworthauptteil aus $response_str und gebe ihn zurück.
  255. </para>
  256. </listitem>
  257. <listitem>
  258. <para>
  259. <code>string Zend_Http_Response::responseCodeAsText($code = null, $http11 =
  260. true)</code>: Erhalte die Standard HTTP Rückantwort für einen Antwortcode
  261. $code. Zum Beispiel wird "Internal Server Error" zurückgegeben, wenn $code
  262. gleich 500 ist. Wenn $http11 gleich true ist (Standard), werden die HTTP/1.1
  263. Standardantworten zurück gegeben, andernfalls die HTTP/1.0 Antworten.
  264. Wird $code nicht angegeben, wird diese Methode alle bekannten HTTP
  265. Antwortcodes als assoziatives Array (code => message) zurückgeben.
  266. </para>
  267. </listitem>
  268. </itemizedlist>
  269. </para>
  270. <para>
  271. Neben der Analysemethoden beinhaltet die Klasse auch einen Satz von Dekodieren für
  272. allgemein HTTP Antwort Transferkodierungen:
  273. <itemizedlist>
  274. <listitem>
  275. <para>
  276. <code>string Zend_Http_Response::decodeChunkedBody($body)</code>: Dekodiere
  277. einen kompletten "Content-Transfer-Encoding: Chunked" Hauptteil
  278. </para>
  279. </listitem>
  280. <listitem>
  281. <para>
  282. <code>string Zend_Http_Response::decodeGzip($body)</code>: Dekodiere
  283. einen "Content-Encoding: gzip" Hauptteil
  284. </para>
  285. </listitem>
  286. <listitem>
  287. <para>
  288. <code>string Zend_Http_Response::decodeDeflate($body)</code>: Dekodiere
  289. einen "Content-Encoding: deflate" Hauptteil
  290. </para>
  291. </listitem>
  292. </itemizedlist>
  293. </para>
  294. </sect2>
  295. </sect1>
  296. <!--
  297. vim:se ts=4 sw=4 et:
  298. -->