Zend_Http_Client.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: 22743 -->
  4. <sect1 id="zend.http.client">
  5. <title>Einführung</title>
  6. <para>
  7. <classname>Zend_Http_Client</classname> stellt eine einfache Schnittstelle für das
  8. Durchführen von Hyper-Text Transfer Protocol (HTTP) Anfragen.
  9. <classname>Zend_Http_Client</classname> unterstützt die meisten einfachen Funktionen, die
  10. man von einem <acronym>HTTP</acronym>-Client erwartet, sowie einige komplexere Funktionen,
  11. wie z.B. <acronym>HTTP</acronym>-Authentifizierung und Dateiuploads. Erfolgreiche Anfragen
  12. (und die meisten nicht erfolgreichen ebenfalls) liefern ein
  13. <classname>Zend_Http_Response</classname>-Objekt zurück, welches den Zugriff auf die Header
  14. und den Hauptteil der Antwort ermöglichen (siehe <link linkend="zend.http.response">diesen
  15. Abschnitt</link>).
  16. </para>
  17. <sect2 id="zend.http.client.usage">
  18. <title>Zend_Http_Client verwenden</title>
  19. <para>
  20. Der Klassenkonstruktor akzeptiert optional eine URL als seinen ersten Parameter (kann
  21. entweder ein String oder ein <classname>Zend_Uri_Http</classname>-Objekt sein) und ein
  22. Array oder <classname>Zend_Config</classname>-Objekt, welches Konfigurationsparameter
  23. enthält. Beides kann weggelassen und später durch Verwendung der Methoden setUri() und
  24. setConfig() gesetzt werden.
  25. <example id="zend.http.client.introduction.example-1">
  26. <title>Ein Zend_Http_Client Objekt instanzieren</title>
  27. <programlisting language="php"><![CDATA[
  28. $client = new Zend_Http_Client('http://example.org', array(
  29. 'maxredirects' => 0,
  30. 'timeout' => 30));
  31. // Dies macht genau dasselbe:
  32. $client = new Zend_Http_Client();
  33. $client->setUri('http://example.org');
  34. $client->setConfig(array(
  35. 'maxredirects' => 0,
  36. 'timeout' => 30));
  37. // Man kann auch ein Zend_Config Objekt verwenden um die Konfiguration
  38. // des Clients zu setzen
  39. $config = new Zend_Config_Ini('httpclient.ini', 'secure');
  40. $client->setConfig($config);
  41. ]]></programlisting>
  42. </example>
  43. <note>
  44. <para>
  45. <classname>Zend_Http_Client</classname> verwendet
  46. <classname>Zend_Uri_Http</classname> um URLs zu prüfen. Das bedeutet, dass einige
  47. spezielle Zeichen wie das Pipe-Symbol ('|') oder das Karet Symbol ('^') in der
  48. URL standardmäßig nicht akzeptiert werden. Das kann geändert werden, indem die
  49. Option 'allow_unwise' von <classname>Zend_Uri</classname> auf
  50. '<constant>TRUE</constant>' gesetzt wird. Siehe <link
  51. linkend="zend.uri.validation.allowunwise">diesen Abschnitt</link> für mehr
  52. Informationen.
  53. </para>
  54. </note>
  55. </para>
  56. </sect2>
  57. <sect2 id="zend.http.client.configuration">
  58. <title>Konfigurationsparameter</title>
  59. <para>
  60. Der Konstruktor und die Methode setConfig() akzeptieren ein assoziatives Array mit
  61. Konfigurationsparametern oder ein <classname>Zend_Config</classname>-Objekt. Das Setzen
  62. dieser Parameter ist optional, da alle einen Standardwert haben.
  63. <table id="zend.http.client.configuration.table">
  64. <title>Konfigurationsparameter von Zend_Http_Client</title>
  65. <tgroup cols="4">
  66. <thead>
  67. <row>
  68. <entry>Parameter</entry>
  69. <entry>Beschreibung</entry>
  70. <entry>Erwartete Werte</entry>
  71. <entry>Standardwert</entry>
  72. </row>
  73. </thead>
  74. <tbody>
  75. <row>
  76. <entry>maxredirects</entry>
  77. <entry>Maximale Anzahl von zu folgenden Umleitungen (0 = keine)</entry>
  78. <entry>integer</entry>
  79. <entry>5</entry>
  80. </row>
  81. <row>
  82. <entry>strict</entry>
  83. <entry>
  84. Ob Prüfungen an Headernamen durchzuführen sind. Einige
  85. Prüffunktionen werden übersprungen, wenn auf
  86. <constant>FALSE</constant> gesetzt. Sollte normalerweise nicht
  87. geändert werden.
  88. </entry>
  89. <entry>boolean</entry>
  90. <entry><constant>TRUE</constant></entry>
  91. </row>
  92. <row>
  93. <entry>strictredirects</entry>
  94. <entry>
  95. Ob beim Umleiten genau dem <acronym>RFC</acronym> zu folgen ist
  96. (siehe <link linkend="zend.http.client.redirections">diesen
  97. Abschnitt</link>)
  98. </entry>
  99. <entry>boolean</entry>
  100. <entry><constant>FALSE</constant></entry>
  101. </row>
  102. <row>
  103. <entry>useragent</entry>
  104. <entry>
  105. String zur Identifizierung des User Agents (gesendet in den
  106. Anfrageheadern)
  107. </entry>
  108. <entry>string</entry>
  109. <entry>'Zend_Http_Client'</entry>
  110. </row>
  111. <row>
  112. <entry>timeout</entry>
  113. <entry>Zeitüberschreitung für Verbindungen (Sekunden)</entry>
  114. <entry>integer</entry>
  115. <entry>10</entry>
  116. </row>
  117. <row>
  118. <entry>httpversion</entry>
  119. <entry>
  120. Version des <acronym>HTTP</acronym> Protokolls (normalerweise '1.1'
  121. oder '1.0')
  122. </entry>
  123. <entry>string</entry>
  124. <entry>'1.1'</entry>
  125. </row>
  126. <row>
  127. <entry>adapter</entry>
  128. <entry>
  129. Zu verwendende Adapterklasse für die Verbindung (siehe
  130. <link linkend="zend.http.client.adapters">diesen Abschnitt</link>)
  131. </entry>
  132. <entry>mixed</entry>
  133. <entry>'Zend_Http_Client_Adapter_Socket'</entry>
  134. </row>
  135. <row>
  136. <entry>keepalive</entry>
  137. <entry>
  138. Ob keep-alive Verbindungen mit dem Server aktiviert werden sollen.
  139. Nützlich und kann die Performance verbessern, wenn mehrere
  140. aufeinanderfolgende Anfragen an denselben Server ausgeführt werden.
  141. </entry>
  142. <entry>boolean</entry>
  143. <entry><constant>FALSE</constant></entry>
  144. </row>
  145. <row>
  146. <entry>storeresponse</entry>
  147. <entry>
  148. Ob die letzte Antwort für einen späteren Aufruf von
  149. <methodname>getLastResponse()</methodname> gespeichert werden soll.
  150. Wird sie auf <constant>FALSE</constant> gesetzt, gibt
  151. <methodname>getLastResponse()</methodname> <constant>NULL</constant>
  152. zurück.
  153. </entry>
  154. <entry>boolean</entry>
  155. <entry><constant>TRUE</constant></entry>
  156. </row>
  157. <row>
  158. <entry>encodecookies</entry>
  159. <entry>
  160. Ob der Cookie-Wert über urlencode oder urldecode übergeben werden
  161. soll oder nicht. Dessen Aktivierung verhindert die Unterstützung
  162. bei einigen Web-Servern. Dessen Deaktivierung limitiert den
  163. Bereich der Werte, die Cookies enthalten können.
  164. </entry>
  165. <entry>boolean</entry>
  166. <entry><constant>TRUE</constant></entry>
  167. </row>
  168. </tbody>
  169. </tgroup>
  170. </table>
  171. </para>
  172. </sect2>
  173. <sect2 id="zend.http.client.basic-requests">
  174. <title>Durchführen von einfachen HTTP-Anfragen</title>
  175. <para>
  176. Das Durchführen von einfachen <acronym>HTTP</acronym>-Anfragen kann sehr leicht durch
  177. Verwendung der Methode request() gemacht werden und benötigt selten mehr als drei
  178. Codezeilen:
  179. <example id="zend.http.client.basic-requests.example-1">
  180. <title>Durchführen einer einfache GET-Anfrage</title>
  181. <programlisting language="php"><![CDATA[
  182. $client = new Zend_Http_Client('http://example.org');
  183. $response = $client->request();
  184. ]]></programlisting>
  185. </example>
  186. Die Methode request() akzeptiert einen optionalen Parameter - die Anfragemethode.
  187. Diese kann <property>GET</property>, <property>POST</property>,
  188. <property>PUT</property>, <property>HEAD</property>, <property>DELETE</property>,
  189. <property>TRACE</property>, <property>OPTIONS</property> oder
  190. <property>CONNECT</property> sein, wie im <acronym>HTTP</acronym>-Protokoll definiert.
  191. <footnote>
  192. <para>
  193. Siehe RFC 2616 - <ulink
  194. url="http://www.w3.org/Protocols/rfc2616/rfc2616.html" />.
  195. </para>
  196. </footnote>.
  197. Der Bequemlichkeit halber sind alle als Klassenkonstanten definiert:
  198. Zend_Http_Client::GET, Zend_Http_Client::POST und so weiter.
  199. </para>
  200. <para>
  201. Wenn keine Methode angegeben worden ist, wird die durch den letzten Aufruf von
  202. <methodname>setMethod()</methodname> gesetzte Methode verwendet. Wenn
  203. <methodname>setMethod()</methodname> vorher nicht aufgerufen worden ist, wird als
  204. Standardmethode <constant>GET</constant> verwendet (siehe obiges Beispiel).
  205. <example id="zend.http.client.basic-requests.example-2">
  206. <title>Andere Anfragemethoden als GET verwenden</title>
  207. <programlisting language="php"><![CDATA[
  208. // Durchführen einer POST Anfrage
  209. $response = $client->request('POST');
  210. // Ein weiterer Weg, eine POST Anfrage durchzuführen
  211. $client->setMethod(Zend_Http_Client::POST);
  212. $response = $client->request();
  213. ]]></programlisting>
  214. </example>
  215. </para>
  216. </sect2>
  217. <sect2 id="zend.http.client.parameters">
  218. <title>Hinzufügen von GET und POST Parametern</title>
  219. <para>
  220. Das Hinzufügen von <constant>GET</constant>-Parametern zu einer <acronym>HTTP</acronym>-Anfrage
  221. ist recht einfach und kann entweder über die Angabe als Teil der URL oder durch
  222. Verwendung der Methode setParameterGet() erfolgen. Diese Methode benötigt den Namen des
  223. <constant>GET</constant>-Parameters als seinen ersten Parameter und den Wert des
  224. <constant>GET</constant>-Parameters als seinen zweiten Parameter. Zur Erleichterung
  225. akzeptiert die Methode setParameterGet() auch ein einzelnes assoziatives Array mit
  226. <constant>GET</constant>-Parameter als Name => Wert Variablen, was beim Setzen von
  227. mehreren <constant>GET</constant>-Parametern komfortabler sein kann.
  228. <example id="zend.http.client.parameters.example-1">
  229. <title>Setzen von GET-Parametern</title>
  230. <programlisting language="php"><![CDATA[
  231. // Setzen eines GET-Parameters mit der Methode setParameterGet
  232. $client->setParameterGet('knight', 'lancelot');
  233. // Dies ist äquivalent zum Setzen der URL:
  234. $client->setUri('http://example.com/index.php?knight=lancelot');
  235. // Hinzufügen mehrerer Parameter durch einen Aufruf
  236. $client->setParameterGet(array(
  237. 'first_name' => 'Bender',
  238. 'middle_name' => 'Bending'
  239. 'made_in' => 'Mexico',
  240. ));
  241. ]]></programlisting>
  242. </example>
  243. </para>
  244. <para>
  245. Während <constant>GET</constant>-Parameter bei jeder Anfragemethode gesetzt werden
  246. können, können POST-Parameter nur im Hauptteil von POST-Anfragen versendet werden. Das
  247. Hinzufügen von POST-Parameter zu einer Anfrage ist sehr ähnlich wie das Hinzufügen von
  248. <constant>GET</constant>-Parametern and kann mit der Methode setParameterPost() gemacht
  249. werden, die vom Aufbau der Methode setParameterGet() ähnlich ist.
  250. <example id="zend.http.client.parameters.example-2">
  251. <title>Setzen von POST-Parametern</title>
  252. <programlisting language="php"><![CDATA[
  253. // Setzen eines POST-Parameters
  254. $client->setParameterPost('language', 'fr');
  255. // Hinzufügen von mehreren POST-Parametern, eines davon mit mehreren Werten
  256. $client->setParameterPost(array(
  257. 'language' => 'es',
  258. 'country' => 'ar',
  259. 'selection' => array(45, 32, 80)
  260. ));
  261. ]]></programlisting>
  262. </example>
  263. Beim Senden einer POST-Anfrage ist zu beachten, dass man sowohl <constant>GET</constant>-
  264. als auch POST-Parameter setzen kann. Auf der anderen Seite wird durch das Setzen von
  265. POST-Parametern für andere Anfragen als POST kein Fehler ausgeworfen. Solange eine
  266. Anfrage keine POST-Anfrage ist, werden POST-Parameter einfach ignoriert.
  267. </para>
  268. </sect2>
  269. <sect2 id="zend.http.client.accessing_last">
  270. <title>Zugriff auf die letzte Anfrage und Antwort</title>
  271. <para>
  272. <classname>Zend_Http_Client</classname> verfügt über Methoden für den Zugriff auf die
  273. letzte gesendete Anfrage und die letzte empfangene Antwort des Client-Objekts.
  274. <classname>Zend_Http_Client->getLastRequest()</classname> hat keine Parameter und gibt
  275. die letzte <acronym>HTTP</acronym>-Anfrage als String zurück, die der Client gesendet
  276. hat. Auf die gleiche Art und Weise gibt
  277. <classname>Zend_Http_Client->getLastResponse()</classname> die letzte
  278. <acronym>HTTP</acronym>-Antwort als <link
  279. linkend="zend.http.response">Zend_Http_Response</link> Objekt zurück, die der Client
  280. empfangen hat.
  281. </para>
  282. </sect2>
  283. </sect1>