Zend_XmlRpc_Client.xml 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. <sect1 id="zend.xmlrpc.client">
  2. <title>Zend_XmlRpc_Client</title>
  3. <sect2 id="zend.xmlrpc.client.introduction">
  4. <title>Wprowadzenie</title>
  5. <para>
  6. Zend Framework zapewnia obsługę wywoływania zdalnych serwisów
  7. XML-RPC jako klient w pakiecie <code>Zend_XmlRpc_Client</code>.
  8. Do głównych funkcjonalności należą: automatyczna konwersja
  9. typów pomiędzy PHP a XML-RPC, obiekt serwera proxy oraz dostęp
  10. do możliwości introspekcji serwerów.
  11. </para>
  12. </sect2>
  13. <sect2 id="zend.xmlrpc.client.method-calls">
  14. <title>Wywołania metod</title>
  15. <para>
  16. Konstruktor klasy <code>Zend_XmlRpc_Client</code> odbiera w
  17. pierwszym parametrze adres URL zdalnego serwera XML-RPC. Nowa
  18. zwrócona instancja może być użyta do wywołania dowolnej ilości
  19. zdalnych metod tego serwera.
  20. </para>
  21. <para>
  22. Aby wywołać zdalną metodę za pomocą klienta XML-RPC, utwórz
  23. instancję i użyj metody <code>call()</code>. Przykładowy kod poniżej
  24. używa demonstracyjnego serwera XML-RPC na stronie Zend Framework.
  25. Możesz go użyć do testowania lub eksplorowania komponentów
  26. <code>Zend_XmlRpc</code>.
  27. </para>
  28. <example id="zend.xmlrpc.client.method-calls.example-1">
  29. <title>Wywołanie metody XML-RPC</title>
  30. <programlisting role="php"><![CDATA[
  31. $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
  32. echo $client->call('test.sayHello');
  33. // hello
  34. ]]>
  35. </programlisting>
  36. </example>
  37. <para>
  38. Wartość XML-RPC zwracana przez wywołanie zdalnej metody jest
  39. automatycznie konwertowana do odpowiedniego natywnego typu
  40. PHP. W powyższym przykładzie, zwraca jest wartość typu
  41. <code>string</code> i jest ona natychmiast gotowa do użycia.
  42. </para>
  43. <para>
  44. Pierwszy parametr metody <code>call()</code> to nazwa zdalnej metody
  45. do wywołania. Jeśli zdalna metoda wymaga jakichkolwiek parametrów,
  46. mogą być one wysłane przez podanie do metody <code>call()</code>
  47. drugiego opcjonalnego parametru w postaci tablicy wartości do
  48. przekazania do zdalnej metody:
  49. </para>
  50. <example id="zend.xmlrpc.client.method-calls.example-2">
  51. <title>Wywołanie metody XML-RPC z parametrem</title>
  52. <programlisting role="php"><![CDATA[
  53. $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
  54. $arg1 = 1.1;
  55. $arg2 = 'foo';
  56. $result = $client->call('test.sayHello', array($arg1, $arg2));
  57. // zmienna $result jest natywnego typu PHP
  58. ]]>
  59. </programlisting>
  60. </example>
  61. <para>
  62. Jeśli zdalna metoda nie wymaga parametrów, ten opcjonalony parametr
  63. może pozostać pusty, lub może być pustą tablicą
  64. <code>array()</code>. Tablica parametrów dla zdalnej metody może
  65. zawierać natywne typy PHP, obiekty <code>Zend_XmlRpc_Value</code>,
  66. lub ich kombinacje.
  67. </para>
  68. <para>
  69. Metoda <code>call()</code> automatycznie skonwertuje odpowiedź
  70. XML-RPC i zwróci wartość odpowiedniego natywnego typu PHP. Obiekt
  71. <code>Zend_XmlRpc_Response</code> ze zwróconą wartością będzie także
  72. dostępny po wywołaniu poprzez wywołanie metody
  73. <code>getLastResponse()</code>.
  74. </para>
  75. </sect2>
  76. <sect2 id="zend.xmlrpc.value.parameters">
  77. <title>Typy i konwersje</title>
  78. <para>
  79. Niektóre zdalne wywołania metod wymagają parametrów. Są one
  80. przekazywane do metody <code>call()</code> obiektu
  81. <code>Zend_XmlRpc_Client</code> jako tablica w drugim parametrze.
  82. Każdy podany parametr może być natywnego typu PHP, wtedy będzie
  83. automatycznie skonwertowany, lub może być obiektem reprezentującym
  84. specyficzny typ XML-RPC (jeden z obiektów <code>Zend_XmlRpc_Value</code>).
  85. </para>
  86. <sect3 id="zend.xmlrpc.value.parameters.php-native">
  87. <title>Natywne typy PHP jako parametry</title>
  88. <para>
  89. Parametry mogą być przekazane do metody <code>call()</code> jako
  90. natywne zmienne PHP, czyli jako <code>string</code>,
  91. <code>integer</code>, <code>float</code>, <code>boolean</code>,
  92. <code>array</code>, lub <code>object</code>. W tym przypadku
  93. każda natywna wartość zostanie automatycznie wykryta i
  94. skonwertowana do jednego z typów XML-RPC, zgodnie z tą tabelą:
  95. </para>
  96. <table id="zend.xmlrpc.value.parameters.php-native.table-1">
  97. <title>Konwersje między typami PHP oraz XML-RPC</title>
  98. <tgroup cols="2">
  99. <thead>
  100. <row>
  101. <entry>Natywny typ PHP</entry>
  102. <entry>Typ XML-RPC</entry>
  103. </row>
  104. </thead>
  105. <tbody>
  106. <row>
  107. <entry>integer</entry>
  108. <entry>int</entry>
  109. </row>
  110. <row>
  111. <entry>double</entry>
  112. <entry>double</entry>
  113. </row>
  114. <row>
  115. <entry>boolean</entry>
  116. <entry>boolean</entry>
  117. </row>
  118. <row>
  119. <entry>string</entry>
  120. <entry>string</entry>
  121. </row>
  122. <row>
  123. <entry>array</entry>
  124. <entry>array</entry>
  125. </row>
  126. <row>
  127. <entry>associative array</entry>
  128. <entry>struct</entry>
  129. </row>
  130. <row>
  131. <entry>object</entry>
  132. <entry>array</entry>
  133. </row>
  134. </tbody>
  135. </tgroup>
  136. </table>
  137. <note>
  138. <title>Na co zamieniane są puste tablice?</title>
  139. <para>
  140. Przekazanie pustej tablicy do metody XML-RPC jest
  141. problematyczne, ponieważ może ona przedstawiać pustą tablicę
  142. lub strukturę. Obiekt <code>Zend_XmlRpc_Client</code>
  143. wykrywa takie przypadki i wywołuje metodę serwera
  144. <code>system.methodSignature</code> aby określić na jaki typ
  145. XML-RPC powinien tę tablicę zamienić
  146. </para>
  147. <para>
  148. Jednak może to powodować pewne problemy. Po pierwsze,
  149. serwery które nie obsługują metody
  150. <code>system.methodSignature</code> będą zapisywać nieudane
  151. żądania, a obiekt <code>Zend_XmlRpc_Client</code> będzie
  152. wtedy zamieniał puste tablice na puste tablice XML-RPC.
  153. Po drugie oznacza to, że każde wywołanie z argumentami w
  154. postaci tablic będą powodować konieczność przeprowadzenia
  155. dodatkowego żądania do zdalnego serwera.
  156. </para>
  157. <para>
  158. Aby całkowicie zablokować takie sprawdzanie, możesz
  159. wywołać metodę <code>setSkipSystemLookup()</code> przed
  160. wywołaniem metody XML-RPC call:
  161. </para>
  162. <programlisting role="php"><![CDATA[
  163. $client->setSkipSystemLookup(true);
  164. $result = $client->call('foo.bar', array(array()));
  165. ]]>
  166. </programlisting>
  167. </note>
  168. </sect3>
  169. <sect3 id="zend.xmlrpc.value.parameters.xmlrpc-value">
  170. <title>Obiekty <code>Zend_XmlRpc_Value</code> jako parametry</title>
  171. <para>
  172. Parametry mogą być także tworzone jako instancje klasy
  173. <code>Zend_XmlRpc_Value</code> w celu określenia dokładnego typu
  174. XML-RPC. Konieczne jest to gdy:
  175. <itemizedlist>
  176. <listitem>
  177. <para>
  178. gdy chcesz być pewny, że parametr poprawnego typu
  179. jest przekazany do procedury (np. procedura wymaga
  180. liczby całkowitej, a ty możesz pobrać tę wartość z
  181. bazy jako łańcuch znaków).
  182. </para>
  183. </listitem>
  184. <listitem>
  185. <para>
  186. Wtedy gdy procedura wymaga typu <code>base64</code>
  187. lub <code>dateTime.iso8601</code> (które nie istnieją
  188. jako natywne typy PHP)
  189. </para>
  190. </listitem>
  191. <listitem>
  192. <para>
  193. Gdy automatyczna konwersja może nie zadziałać (np.
  194. gdy chcesz przekazać pustą strukturę XML-RPC jako
  195. parametr. Puste struktury są reprezentowane przez
  196. puste tablice w PHP, ale jeśli podasz pustą tablicę
  197. w parametrze będzie ona automatycznie skonwertowana
  198. do tablicy XML-RPC z tego powodu, że nie jest ona
  199. tablicą asocjacyjną)
  200. </para>
  201. </listitem>
  202. </itemizedlist>
  203. </para>
  204. <para>
  205. Są dwa sposoby utworzenia obiektu <code>Zend_XmlRpc_Value</code>:
  206. bezpośrednie utworzenie instancji jednej z podklas klasy
  207. <code>Zend_XmlRpc_Value</code>,lub użycie statycznej metody
  208. fabryki <code>Zend_XmlRpc_Value::getXmlRpcValue()</code>.
  209. </para>
  210. <table id="zend.xmlrpc.value.parameters.xmlrpc-value.table-1">
  211. <title>Obiekty <code>Zend_XmlRpc_Value</code> dla typów XML-RPC</title>
  212. <tgroup cols="3">
  213. <thead>
  214. <row>
  215. <entry>Typ XML-RPC</entry>
  216. <entry>Stała <code>Zend_XmlRpc_Value</code></entry>
  217. <entry>Obiekt <code>Zend_XmlRpc_Value</code> Object</entry>
  218. </row>
  219. </thead>
  220. <tbody>
  221. <row>
  222. <entry>int</entry>
  223. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_INTEGER</code></entry>
  224. <entry><code>Zend_XmlRpc_Value_Integer</code></entry>
  225. </row>
  226. <row>
  227. <entry>double</entry>
  228. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_DOUBLE</code></entry>
  229. <entry><code>Zend_XmlRpc_Value_Double</code></entry>
  230. </row>
  231. <row>
  232. <entry>boolean</entry>
  233. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_BOOLEAN</code></entry>
  234. <entry><code>Zend_XmlRpc_Value_Boolean</code></entry>
  235. </row>
  236. <row>
  237. <entry>string</entry>
  238. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_STRING</code></entry>
  239. <entry><code>Zend_XmlRpc_Value_String</code></entry>
  240. </row>
  241. <row>
  242. <entry>base64</entry>
  243. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_BASE64</code></entry>
  244. <entry><code>Zend_XmlRpc_Value_Base64</code></entry>
  245. </row>
  246. <row>
  247. <entry>dateTime.iso8601</entry>
  248. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_DATETIME</code></entry>
  249. <entry><code>Zend_XmlRpc_Value_DateTime</code></entry>
  250. </row>
  251. <row>
  252. <entry>array</entry>
  253. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_ARRAY</code></entry>
  254. <entry><code>Zend_XmlRpc_Value_Array</code></entry>
  255. </row>
  256. <row>
  257. <entry>struct</entry>
  258. <entry><code>Zend_XmlRpc_Value::XMLRPC_TYPE_STRUCT</code></entry>
  259. <entry><code>Zend_XmlRpc_Value_Struct</code></entry>
  260. </row>
  261. </tbody>
  262. </tgroup>
  263. </table>
  264. <para>
  265. <note>
  266. <title>Automatyczna konwersja</title>
  267. <para>
  268. Kiedy tworzymy nowy obiekt
  269. <code>Zend_XmlRpc_Value</code>, jego wartość jest
  270. ustawiana jako typ PHP. Wartość będzie konwertowana do
  271. określonego typu używając rzytowania typów PHP. Na
  272. przykład, jeśli podany jest łańcuch znaków jako wartość
  273. do obiektu <code>Zend_XmlRpc_Value_Integer</code>,
  274. wartość ta będzie konwertowana za pomocą
  275. <code>(int)$value</code>.
  276. </para>
  277. </note>
  278. </para>
  279. </sect3>
  280. </sect2>
  281. <sect2 id="zend.xmlrpc.client.requests-and-responses">
  282. <title>Obiekt serwera proxy</title>
  283. <para>
  284. Innym sposobem wywołania zdalnych metod za pomocą klienta XML-RPC
  285. jest użycie serwera proxy. Jest to obiekt PHP, który rozszerza
  286. zdalną przestrzeń nazw XML-RPC, powodując, że obiekt ten działa jak
  287. natywny obiekt PHP.
  288. </para>
  289. <para>
  290. Aby utworzyć instancję serwera proxy, wywołaj metodę
  291. <code>getProxy()</code> instancji <code>Zend_XmlRpc_Client</code>.
  292. To zwróci instancję obiektu <code>Zend_XmlRpc_Client_ServerProxy</code>.
  293. Wywołanie dowolnej metody na obiekcie serwera proxy będzie przekazane
  294. do zdalnego serwera, a parametry będą przekazane jak do każdej innej
  295. metody PHP.
  296. </para>
  297. <example id="zend.xmlrpc.client.requests-and-responses.example-1">
  298. <title>Rozszerzanie domyślnej przestrzeni nazw</title>
  299. <programlisting role="php"><![CDATA[
  300. $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
  301. $server = $client->getProxy(); // Rozszerza domyślną przestrzeń nazw
  302. $hello = $server->test->sayHello(1, 2); // test.Hello(1, 2) zwraca "hello"
  303. ]]>
  304. </programlisting>
  305. </example>
  306. <para>
  307. Metoda <code>getProxy()</code> pobiera opcjonalny argument
  308. określający, która przestrzeń nazw zdalnego serwera chcemy
  309. rozszerzyć. Jeśli przestrzeń nazwa nie zostanie określona,
  310. rozszerzona zostanie domyślna przestrzeń nazwa. W następnym
  311. przykładzie będzie rozszerzona przestrzeń nazw
  312. <code>test</code>:
  313. </para>
  314. <example id="zend.xmlrpc.client.requests-and-responses.example-2">
  315. <title>Rozszerzanie dowolnej przestrzeni nazw</title>
  316. <programlisting role="php"><![CDATA[
  317. $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
  318. $test = $client->getProxy('test'); // Rozszerza przestrzeń nazwa "test"
  319. $hello = $test->sayHello(1, 2); // test.Hello(1,2) zwraca "hello"
  320. ]]>
  321. </programlisting>
  322. </example>
  323. <para>
  324. Jeśli zdalny serwer obsługuje zagnieżdżone przestrzenie nazwa o
  325. dowolnej ilości zagnieżdżeń, mogą być one także użyte przez serwer
  326. proxy. Na przykład, jeśli serwer w powyższym przykładzie posiada
  327. metodę <code>test.foo.bar()</code>, może być ona wywołana jako
  328. <code>$test->foo->bar()</code>.
  329. </para>
  330. </sect2>
  331. <sect2 id="zend.xmlrpc.client.error-handling">
  332. <title>Obsługa błędów</title>
  333. <para>
  334. Dwa rodzaje błędów mogą wystąpić podczas wywoływania metod XML-RPC:
  335. błędy HTTP oraz błędy XML-RPC. Klient <code>Zend_XmlRpc_Client</code>
  336. rozpoznaje te błędy i daje możliwośc wykrycia i złapania każdego z
  337. nich.
  338. </para>
  339. <sect3 id="zend.xmlrpc.client.error-handling.http">
  340. <title>Błędy HTTP</title>
  341. <para>
  342. Jeśli wystąpi jakiś błąd HTTP, na przykład gdy zdalny serwer
  343. HTTP zwróci błąd <code>404 Not Found</code>, wyrzucony zostanie
  344. wyjątek <code>Zend_XmlRpc_Client_HttpException</code>.
  345. </para>
  346. <example id="zend.xmlrpc.client.error-handling.http.example-1">
  347. <title>Obsługa błędów HTTP</title>
  348. <programlisting role="php"><![CDATA[
  349. $client = new Zend_XmlRpc_Client('http://foo/404');
  350. try {
  351. $client->call('bar', array($arg1, $arg2));
  352. } catch (Zend_XmlRpc_Client_HttpException $e) {
  353. // $e->getCode() zwraca 404
  354. // $e->getMessage() zwraca "Not found"
  355. }
  356. ]]>
  357. </programlisting>
  358. </example>
  359. <para>
  360. Zależnie od tego jak używany jest klient XML-RPC, gdy wystąpi
  361. błąd HTTP zostanie wyrzucony wyjątek
  362. <code>Zend_XmlRpc_Client_HttpException</code>.
  363. </para>
  364. </sect3>
  365. <sect3 id="zend.xmlrpc.client.error-handling.faults">
  366. <title>Błędy XML-RPC</title>
  367. <para>
  368. Błędy XML-RPC są analogiczne do wyjątków PHP. Jest to specjalny
  369. typ zwracany przez wywołanie metody XML-RPC, który zawiera
  370. zarówno kod błędu jak i informacje o błędzie. Błędy XML-RPC są
  371. obsługiwane różnie, zależnie od kontekstu w jakim użyty jest
  372. obiekt <code>Zend_XmlRpc_Client</code>.
  373. </para>
  374. <para>
  375. Gdy użyta jest metoda <code>call()</code> lub obiekt serwera
  376. proxy, błędy XML-RPC spowodują wyrzucenie wyjątku
  377. <code>Zend_XmlRpc_Client_FaultException</code>. Kod oraz
  378. informacje o błędzie wyjątku będą bezpośrednio mapować do
  379. ich odpowiednich wartości oryginalnej odpowiedzi błędu XML-RPC.
  380. </para>
  381. <example id="zend.xmlrpc.client.error-handling.faults.example-1">
  382. <title>Obsługa błędów XML-RPC</title>
  383. <programlisting role="php"><![CDATA[
  384. $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
  385. try {
  386. $client->call('badMethod');
  387. } catch (Zend_XmlRpc_Client_FaultException $e) {
  388. // $e->getCode() zwraca 1
  389. // $e->getMessage() zwraca "Unknown method"
  390. }
  391. ]]>
  392. </programlisting>
  393. </example>
  394. <para>
  395. Gdy metoda <code>call()</code> jest użyta do przeprowadzenia
  396. żądania, przy wystąpieniu błędu zostanie wyrzucony wyjątek
  397. <code>Zend_XmlRpc_Client_FaultException</code>. Obiekt
  398. <code>Zend_XmlRpc_Response</code> zawierający błąd będzie także
  399. dostępny przez wywołanie metody <code>getLastResponse()</code>.
  400. </para>
  401. <para>
  402. Gdy do przeprowadzenia żądania użyta jest metoda
  403. <code>doRequest()</code>, nie będzie wyrzucony żaden wyjątek.
  404. Zamiast tego zwrócony zostanie obiekt
  405. <code>Zend_XmlRpc_Response</code> zawierający informacje o
  406. błędzie. Może to być sprawdzone za pomocą metody
  407. <code>isFault()</code> obiektu <code>Zend_XmlRpc_Response</code>.
  408. </para>
  409. </sect3>
  410. </sect2>
  411. <sect2 id="zend.xmlrpc.client.introspection">
  412. <title>Introspekcja serwerów</title>
  413. <para>
  414. Niektóre serwery XML-RPC obsługują metody introspekcji w przestrzeni
  415. nazw XML-RPC <code>system.</code>. <code>Zend_XmlRpc_Client</code>
  416. zapewnia specjalną obsługę dla serwerów z taką funkcjonalnością.
  417. </para>
  418. <para>
  419. Instancja <code>Zend_XmlRpc_Client_ServerIntrospection</code> może
  420. być odebrana przez wywołanie metody <code>getIntrospector()</code>
  421. obiektu <code>Zend_XmlRpcClient</code>. Następnie obiekt ten może
  422. być użyty do przeprowadzenia operacji introspekcji na serwerze.
  423. </para>
  424. </sect2>
  425. <sect2 id="zend.xmlrpc.client.request-to-response">
  426. <title>Od żądania do odpowiedzi</title>
  427. <para>
  428. Wewnątrz wygląda to tak, że metoda <code>call()</code> instancji
  429. obiektu <code>Zend_XmlRpc_Client</code> buduje obiekt żądania
  430. (<code>Zend_XmlRpc_Request</code>) i wysyła go do innej metody,
  431. <code>doRequest()</code>, ktora zwraca obiekt odpowiedzi
  432. (<code>Zend_XmlRpc_Response</code>).
  433. </para>
  434. <para>
  435. Metoda <code>doRequest()</code> jest także dostępna dla
  436. bezpośredniego użycia:
  437. </para>
  438. <example id="zend.xmlrpc.client.request-to-response.example-1">
  439. <title>Przetwarzanie żądania do odpowiedzi</title>
  440. <programlisting role="php"><![CDATA[
  441. $client = new Zend_XmlRpc_Client('http://framework.zend.com/xmlrpc');
  442. $request = new Zend_XmlRpc_Request();
  443. $request->setMethod('test.sayHello');
  444. $request->setParams(array('foo', 'bar'));
  445. $client->doRequest($request);
  446. // $server->getLastRequest() zwraca instancję Zend_XmlRpc_Request
  447. // $server->getLastResponse() zwraca instancję Zend_XmlRpc_Response
  448. ]]>
  449. </programlisting>
  450. </example>
  451. <para>
  452. Zawsze po wywołaniu metody XML-RPC przez klienta, niezależnie od
  453. tego czy za pomocą metody <code>call()</code>, metody
  454. <code>doRequest()</code> czy poprzez serwer proxy, ostatni obiekt
  455. żądania i odpowiadający mu obiekt odpowiedzi będą zawsze dostępne
  456. odpowiednio za pomocą metod <code>getLastRequest()</code> oraz
  457. <code>getLastResponse()</code>.
  458. </para>
  459. </sect2>
  460. <sect2 id="zend.xmlrpc.client.http-client">
  461. <title>Klient HTTP i testowanie</title>
  462. <para>
  463. We wszystkich poprzednich przykładach nie został określony żaden
  464. klient HTTP. W takim wypadku utworzona zostaje nowa instancja
  465. <code>Zend_Http_Client</code> z jej domyślnymi opcjami i ta
  466. instancja zostaje użyta automatycznie przez
  467. <code>Zend_XmlRpc_Client</code>.
  468. </para>
  469. <para>
  470. Klient HTTP może być odebrany w dowolnej chwili za pomocą metody
  471. <code>getHttpClient()</code>. W większości przypadków domyślny
  472. klient HTTP będzie wystarczający. Jakkolwiek, metoda
  473. <code>setHttpClient()</code> pozwala na ustawienie innego klienta
  474. HTTP dla danej instancji.
  475. </para>
  476. <para>
  477. Metoda <code>setHttpClient()</code> jest szczególnie przydatna dla
  478. testów jednostkowych. Gdy jest połączona z obiektem
  479. <code>Zend_Http_Client_Adapter_Test</code>, zdalne serwisy mogą
  480. być zasymulowane dla naszego testowania. Zobacz testy jednostkowe
  481. dla <code>Zend_XmlRpc_Client</code> aby zobaczyć jak można to
  482. zrobić.
  483. </para>
  484. </sect2>
  485. </sect1>
  486. <!--
  487. vim:se ts=4 sw=4 et:
  488. -->