XML-RPC přes CURL, aneb jak odeslat XML soubor vzdálené službě, když nemáme allow_url_fopen

Článek patří do seriálu o knihovně CURL. Rozebírá využití CURL pro odesilání obsahu vzdáleným službám, např. pro komunikaci s webovými službami nebo XML-RPC požadavků.


Zdrojový kód ke stažení index.php.txtUkázky k nahlédnutí index.php.

Za příklad jsem si vzal zjištěni SRanku a inspiroval jsem se starším článkem Jak zjistit S-Rank pomocí XML-RPC. Pro úplné začátky práce s knihovnou CURL doporučuji článek CURL, jak načíst obsah url, když nefunguje file_get_contents.

Vše o S-Ranku bylo víceméně popsáno ve zmíněném článku, tak se pusťme rovnou do příkladu. Jde o nahrazení funkce file_get_contents, která může být kvůli allow_url_fopen zakázaná pro načítání stránek ze vzdáleného umístění.

  1. function getSRank($url) {
  2. $params = array("0", htmlspecialchars($url), 0);
  3. $request = xmlrpc_encode_request("getRank", $params);
  4.  
  5. $header[] = "Content-type: text/xml";
  6. $header[] = "Content-length: ".strlen($request);
  7. $header[] = $request;
  8.  
  9. $ch = curl_init();
  10. curl_setopt($ch, CURLOPT_URL, 'http://srank.seznam.cz');
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
  12. curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
  13. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST' );
  14. $file = curl_exec($ch);
  15. curl_close($ch);
  16. $response = xmlrpc_decode($file);
  17. if ($response['status'] == 200) return round($response['rank']/2.55,0);
  18. else throw new Exception("SRank se něpodařilo získat.");
  19. }

A to je vše. Stejným způsobem lze komunikovat i s jinými webovými službami. CURL zde slouží pouze jako prostředník pro odeslání dat a příjmutí zpracovaného výsledku.

podobné články

27.06.2008CURL, jak načíst obsah url, když nefunguje file_get_contents(40%)
01.12.2008Cron a kdo vlastně spouští skript? Démon v pozadí nebo uživatel v prohlížeči?(20%)
27.11.2008Cron a přesměrování, aneb jak na procesy v pozadí(20%)