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