Zend_Http_Response.xml 15 KB

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