Zend_Http_Response.xml 15 KB

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